switch to use mat4

Change-Id: I8283a989cfd2b74d53958150bc90298bc083fee7
diff --git a/services/surfaceflinger/RenderEngine/Description.cpp b/services/surfaceflinger/RenderEngine/Description.cpp
index 8e404b2..b0325c6 100644
--- a/services/surfaceflinger/RenderEngine/Description.cpp
+++ b/services/surfaceflinger/RenderEngine/Description.cpp
@@ -33,9 +33,7 @@
     mOpaque = true;
     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));
-    memcpy(mProjectionMatrix, m, sizeof(mProjectionMatrix));
 }
 
 Description::~Description() {
@@ -78,8 +76,8 @@
     mUniformsDirty = true;
 }
 
-void Description::setProjectionMatrix(GLfloat const* mtx) {
-    memcpy(mProjectionMatrix, mtx, sizeof(mProjectionMatrix));
+void Description::setProjectionMatrix(const mat4& mtx) {
+    mProjectionMatrix = mtx;
     mUniformsDirty = true;
 }
 
diff --git a/services/surfaceflinger/RenderEngine/Description.h b/services/surfaceflinger/RenderEngine/Description.h
index 862301b..0230762 100644
--- a/services/surfaceflinger/RenderEngine/Description.h
+++ b/services/surfaceflinger/RenderEngine/Description.h
@@ -49,7 +49,7 @@
     // color used when texturing is disabled
     GLclampf mColor[4];
     // projection matrix
-    GLfloat mProjectionMatrix[16];
+    mat4 mProjectionMatrix;
 
 public:
     Description();
@@ -61,7 +61,7 @@
     void setTexture(const Texture& texture);
     void disableTexture();
     void setColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-    void setProjectionMatrix(GLfloat const* mtx);
+    void setProjectionMatrix(const mat4& mtx);
 
 private:
     bool mUniformsDirty;
diff --git a/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp
index 06125b0..baa57e6 100644
--- a/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp
@@ -160,7 +160,7 @@
     glTexParameterx(target, GL_TEXTURE_MAG_FILTER, filter);
     glTexParameterx(target, GL_TEXTURE_MIN_FILTER, filter);
     glMatrixMode(GL_TEXTURE);
-    glLoadMatrixf(texture.getMatrix());
+    glLoadMatrixf(texture.getMatrix().asArray());
     glMatrixMode(GL_MODELVIEW);
     glDisable(GL_TEXTURE_2D);
     glEnable(GL_TEXTURE_EXTERNAL_OES);
diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
index cde1e3a..0979647 100644
--- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
+++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp
@@ -76,25 +76,9 @@
 
 void GLES20RenderEngine::setViewportAndProjection(
         size_t vpw, size_t vph, size_t w, size_t h, bool yswap) {
-
-    struct ortho {
-        inline void operator() (GLfloat *m,
-                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);
+    mat4 m;
+    if (yswap)  m = mat4::ortho(0, w, h, 0, 0, 1);
+    else        m = mat4::ortho(0, w, 0, h, 0, 1);
 
     glViewport(0, 0, vpw, vph);
     mState.setProjectionMatrix(m);
diff --git a/services/surfaceflinger/RenderEngine/Program.cpp b/services/surfaceflinger/RenderEngine/Program.cpp
index c5691d7..ece0905 100644
--- a/services/surfaceflinger/RenderEngine/Program.cpp
+++ b/services/surfaceflinger/RenderEngine/Program.cpp
@@ -129,7 +129,7 @@
 
     if (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) {
         glUniform1f(mAlphaPlaneLoc, desc.mPlaneAlpha);
@@ -138,7 +138,7 @@
         glUniform4fv(mColorLoc, 1, desc.mColor);
     }
     // these uniforms are always present
-    glUniformMatrix4fv(mProjectionMatrixLoc, 1, GL_FALSE, desc.mProjectionMatrix);
+    glUniformMatrix4fv(mProjectionMatrixLoc, 1, GL_FALSE, desc.mProjectionMatrix.asArray());
 }
 
 } /* namespace android */
diff --git a/services/surfaceflinger/RenderEngine/Texture.cpp b/services/surfaceflinger/RenderEngine/Texture.cpp
index 2cb3b65..8875b6d 100644
--- a/services/surfaceflinger/RenderEngine/Texture.cpp
+++ b/services/surfaceflinger/RenderEngine/Texture.cpp
@@ -23,15 +23,11 @@
 Texture::Texture() :
     mTextureName(0), mTextureTarget(TEXTURE_2D),
     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) :
             mTextureName(textureName), mTextureTarget(textureTarget),
             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) {
@@ -44,7 +40,7 @@
 
 
 void Texture::setMatrix(float const* matrix) {
-    memcpy(mTextureMatrix, matrix, sizeof(mTextureMatrix));
+    mTextureMatrix = mat4(matrix);
 }
 
 void Texture::setFiltering(bool enabled) {
@@ -64,7 +60,7 @@
     return mTextureTarget;
 }
 
-float const* Texture::getMatrix() const {
+const mat4& Texture::getMatrix() const {
     return mTextureMatrix;
 }
 
diff --git a/services/surfaceflinger/RenderEngine/Texture.h b/services/surfaceflinger/RenderEngine/Texture.h
index 981b475..8cf85fc 100644
--- a/services/surfaceflinger/RenderEngine/Texture.h
+++ b/services/surfaceflinger/RenderEngine/Texture.h
@@ -15,6 +15,7 @@
  */
 
 #include <stdint.h>
+#include <ui/mat4.h>
 
 #ifndef SF_RENDER_ENGINE_TEXTURE_H
 #define SF_RENDER_ENGINE_TEXTURE_H
@@ -27,7 +28,7 @@
     size_t mWidth;
     size_t mHeight;
     bool mFiltering;
-    float mTextureMatrix[16];
+    mat4 mTextureMatrix;
 
 public:
     enum Target { TEXTURE_2D = 0x0DE1, TEXTURE_EXTERNAL = 0x8D65 };
@@ -45,7 +46,7 @@
     uint32_t getTextureName() const;
     uint32_t getTextureTarget() const;
 
-    float const* getMatrix() const;
+    const mat4& getMatrix() const;
     bool getFiltering() const;
     size_t getWidth() const;
     size_t getHeight() const;