switch to use mat4

Change-Id: I8283a989cfd2b74d53958150bc90298bc083fee7
This commit is contained in:
Mathias Agopian 2013-08-26 20:42:07 -07:00
parent 595ea77f6b
commit a8c386f1c3
7 changed files with 15 additions and 36 deletions

View File

@ -33,9 +33,7 @@ Description::Description() :
mOpaque = true; mOpaque = true;
mTextureEnabled = false; mTextureEnabled = false;
const GLfloat m[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 };
memset(mColor, 0, sizeof(mColor)); memset(mColor, 0, sizeof(mColor));
memcpy(mProjectionMatrix, m, sizeof(mProjectionMatrix));
} }
Description::~Description() { Description::~Description() {
@ -78,8 +76,8 @@ void Description::setColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf
mUniformsDirty = true; mUniformsDirty = true;
} }
void Description::setProjectionMatrix(GLfloat const* mtx) { void Description::setProjectionMatrix(const mat4& mtx) {
memcpy(mProjectionMatrix, mtx, sizeof(mProjectionMatrix)); mProjectionMatrix = mtx;
mUniformsDirty = true; mUniformsDirty = true;
} }

View File

@ -49,7 +49,7 @@ class Description {
// color used when texturing is disabled // color used when texturing is disabled
GLclampf mColor[4]; GLclampf mColor[4];
// projection matrix // projection matrix
GLfloat mProjectionMatrix[16]; mat4 mProjectionMatrix;
public: public:
Description(); Description();
@ -61,7 +61,7 @@ public:
void setTexture(const Texture& texture); void setTexture(const Texture& texture);
void disableTexture(); void disableTexture();
void setColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); void setColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void setProjectionMatrix(GLfloat const* mtx); void setProjectionMatrix(const mat4& mtx);
private: private:
bool mUniformsDirty; bool mUniformsDirty;

View File

@ -160,7 +160,7 @@ void GLES11RenderEngine::setupLayerTexturing(const Texture& texture) {
glTexParameterx(target, GL_TEXTURE_MAG_FILTER, filter); glTexParameterx(target, GL_TEXTURE_MAG_FILTER, filter);
glTexParameterx(target, GL_TEXTURE_MIN_FILTER, filter); glTexParameterx(target, GL_TEXTURE_MIN_FILTER, filter);
glMatrixMode(GL_TEXTURE); glMatrixMode(GL_TEXTURE);
glLoadMatrixf(texture.getMatrix()); glLoadMatrixf(texture.getMatrix().asArray());
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_EXTERNAL_OES); glEnable(GL_TEXTURE_EXTERNAL_OES);

View File

@ -76,25 +76,9 @@ size_t GLES20RenderEngine::getMaxViewportDims() const {
void GLES20RenderEngine::setViewportAndProjection( void GLES20RenderEngine::setViewportAndProjection(
size_t vpw, size_t vph, size_t w, size_t h, bool yswap) { size_t vpw, size_t vph, size_t w, size_t h, bool yswap) {
mat4 m;
struct ortho { if (yswap) m = mat4::ortho(0, w, h, 0, 0, 1);
inline void operator() (GLfloat *m, else m = mat4::ortho(0, w, 0, h, 0, 1);
GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,
GLfloat near, GLfloat far) const {
memset(m, 0, 16*sizeof(GLfloat));
m[ 0] = 2.0f / (right - left);
m[ 5] = 2.0f / (top - bottom);
m[10] =-2.0f / (far - near);
m[15] = 1.0f;
m[12] = -(right + left) / (right - left);
m[13] = -(top + bottom) / (top - bottom);
m[14] = -(far + near) / (far - near);
}
} ortho;
GLfloat m[16];
if (yswap) ortho(m, 0, w, h, 0, 0, 1);
else ortho(m, 0, w, 0, h, 0, 1);
glViewport(0, 0, vpw, vph); glViewport(0, 0, vpw, vph);
mState.setProjectionMatrix(m); mState.setProjectionMatrix(m);

View File

@ -129,7 +129,7 @@ void Program::setUniforms(const Description& desc) {
if (mSamplerLoc >= 0) { if (mSamplerLoc >= 0) {
glUniform1i(mSamplerLoc, 0); glUniform1i(mSamplerLoc, 0);
glUniformMatrix4fv(mTextureMatrixLoc, 1, GL_FALSE, desc.mTexture.getMatrix()); glUniformMatrix4fv(mTextureMatrixLoc, 1, GL_FALSE, desc.mTexture.getMatrix().asArray());
} }
if (mAlphaPlaneLoc >= 0) { if (mAlphaPlaneLoc >= 0) {
glUniform1f(mAlphaPlaneLoc, desc.mPlaneAlpha); glUniform1f(mAlphaPlaneLoc, desc.mPlaneAlpha);
@ -138,7 +138,7 @@ void Program::setUniforms(const Description& desc) {
glUniform4fv(mColorLoc, 1, desc.mColor); glUniform4fv(mColorLoc, 1, desc.mColor);
} }
// these uniforms are always present // these uniforms are always present
glUniformMatrix4fv(mProjectionMatrixLoc, 1, GL_FALSE, desc.mProjectionMatrix); glUniformMatrix4fv(mProjectionMatrixLoc, 1, GL_FALSE, desc.mProjectionMatrix.asArray());
} }
} /* namespace android */ } /* namespace android */

View File

@ -23,15 +23,11 @@ namespace android {
Texture::Texture() : Texture::Texture() :
mTextureName(0), mTextureTarget(TEXTURE_2D), mTextureName(0), mTextureTarget(TEXTURE_2D),
mWidth(0), mHeight(0), mFiltering(false) { mWidth(0), mHeight(0), mFiltering(false) {
const float m[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 };
memcpy(mTextureMatrix, m, sizeof(mTextureMatrix));
} }
Texture::Texture(Target textureTarget, uint32_t textureName) : Texture::Texture(Target textureTarget, uint32_t textureName) :
mTextureName(textureName), mTextureTarget(textureTarget), mTextureName(textureName), mTextureTarget(textureTarget),
mWidth(0), mHeight(0), mFiltering(false) { mWidth(0), mHeight(0), mFiltering(false) {
const float m[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 };
memcpy(mTextureMatrix, m, sizeof(mTextureMatrix));
} }
void Texture::init(Target textureTarget, uint32_t textureName) { void Texture::init(Target textureTarget, uint32_t textureName) {
@ -44,7 +40,7 @@ Texture::~Texture() {
void Texture::setMatrix(float const* matrix) { void Texture::setMatrix(float const* matrix) {
memcpy(mTextureMatrix, matrix, sizeof(mTextureMatrix)); mTextureMatrix = mat4(matrix);
} }
void Texture::setFiltering(bool enabled) { void Texture::setFiltering(bool enabled) {
@ -64,7 +60,7 @@ uint32_t Texture::getTextureTarget() const {
return mTextureTarget; return mTextureTarget;
} }
float const* Texture::getMatrix() const { const mat4& Texture::getMatrix() const {
return mTextureMatrix; return mTextureMatrix;
} }

View File

@ -15,6 +15,7 @@
*/ */
#include <stdint.h> #include <stdint.h>
#include <ui/mat4.h>
#ifndef SF_RENDER_ENGINE_TEXTURE_H #ifndef SF_RENDER_ENGINE_TEXTURE_H
#define SF_RENDER_ENGINE_TEXTURE_H #define SF_RENDER_ENGINE_TEXTURE_H
@ -27,7 +28,7 @@ class Texture {
size_t mWidth; size_t mWidth;
size_t mHeight; size_t mHeight;
bool mFiltering; bool mFiltering;
float mTextureMatrix[16]; mat4 mTextureMatrix;
public: public:
enum Target { TEXTURE_2D = 0x0DE1, TEXTURE_EXTERNAL = 0x8D65 }; enum Target { TEXTURE_2D = 0x0DE1, TEXTURE_EXTERNAL = 0x8D65 };
@ -45,7 +46,7 @@ public:
uint32_t getTextureName() const; uint32_t getTextureName() const;
uint32_t getTextureTarget() const; uint32_t getTextureTarget() const;
float const* getMatrix() const; const mat4& getMatrix() const;
bool getFiltering() const; bool getFiltering() const;
size_t getWidth() const; size_t getWidth() const;
size_t getHeight() const; size_t getHeight() const;