OSDN Git Service

Implement texture enable.
authorNicolas Capens <capn@google.com>
Thu, 30 Oct 2014 13:10:57 +0000 (09:10 -0400)
committerNicolas Capens <nicolascapens@google.com>
Thu, 30 Oct 2014 16:34:15 +0000 (16:34 +0000)
BUG=18110152

Change-Id: I47b38cb10ea0b73c522817f9dbe5a5d118f3c599
Reviewed-on: https://swiftshader-review.googlesource.com/1282
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
src/GLES2/libGLES_CM/Context.cpp
src/GLES2/libGLES_CM/Context.h
src/GLES2/libGLES_CM/libGLES_CM.cpp

index 428ba7b..86f6be2 100644 (file)
@@ -167,6 +167,7 @@ Context::Context(const egl::Config *config, const Context *shareContext)
     markAllStateDirty();\r
 \r
     matrixMode = GL_MODELVIEW;\r
+    texture2D = false;\r
 }\r
 \r
 Context::~Context()\r
@@ -178,7 +179,7 @@ Context::~Context()
        \r
     for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)\r
     {\r
-        for(int sampler = 0; sampler < MAX_TEXTURE_IMAGE_UNITS; sampler++)\r
+        for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++)\r
         {\r
             mState.samplerTexture[type][sampler].set(NULL);\r
         }\r
@@ -571,6 +572,11 @@ void Context::setLightAttenuationQuadratic(int index, float quadratic)
        light[index].attenuation.quadratic = quadratic;\r
 }\r
 \r
+void Context::setTexture2D(bool enable)\r
+{\r
+    texture2D = enable;\r
+}\r
+\r
 void Context::setLineWidth(GLfloat width)\r
 {\r
     mState.lineWidth = width;\r
@@ -1135,7 +1141,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
         break;\r
     case GL_TEXTURE_BINDING_2D:\r
         {\r
-            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_IMAGE_UNITS - 1)\r
+            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_UNITS - 1)\r
             {\r
                 error(GL_INVALID_OPERATION);\r
                 return false;\r
@@ -1146,7 +1152,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
         break;\r
     case GL_TEXTURE_BINDING_CUBE_MAP_OES:\r
         {\r
-            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_IMAGE_UNITS - 1)\r
+            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_UNITS - 1)\r
             {\r
                 error(GL_INVALID_OPERATION);\r
                 return false;\r
@@ -1157,7 +1163,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
         break;\r
     case GL_TEXTURE_BINDING_EXTERNAL_OES:\r
         {\r
-            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_IMAGE_UNITS - 1)\r
+            if(mState.activeSampler < 0 || mState.activeSampler > MAX_TEXTURE_UNITS - 1)\r
             {\r
                 error(GL_INVALID_OPERATION);\r
                 return false;\r
@@ -1170,6 +1176,7 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
     case GL_MAX_MODELVIEW_STACK_DEPTH:  *params = MAX_MODELVIEW_STACK_DEPTH;  break;\r
        case GL_MAX_PROJECTION_STACK_DEPTH: *params = MAX_PROJECTION_STACK_DEPTH; break;\r
        case GL_MAX_TEXTURE_STACK_DEPTH:    *params = MAX_TEXTURE_STACK_DEPTH;    break;\r
+       case GL_MAX_TEXTURE_UNITS:          *params = MAX_TEXTURE_UNITS;          break;\r
     default:\r
         return false;\r
     }\r
@@ -1232,7 +1239,6 @@ int Context::getQueryParameterNum(GLenum pname)
     case GL_TEXTURE_BINDING_2D:\r
     case GL_TEXTURE_BINDING_CUBE_MAP_OES:\r
     case GL_TEXTURE_BINDING_EXTERNAL_OES:\r
-       case GL_MAX_TEXTURE_UNITS:\r
         return 1;\r
     case GL_MAX_VIEWPORT_DIMS:\r
         return 2;\r
@@ -1270,6 +1276,7 @@ int Context::getQueryParameterNum(GLenum pname)
        case GL_MAX_MODELVIEW_STACK_DEPTH:\r
        case GL_MAX_PROJECTION_STACK_DEPTH:\r
        case GL_MAX_TEXTURE_STACK_DEPTH:\r
+       case GL_MAX_TEXTURE_UNITS:\r
         return 1;\r
        default:\r
                UNREACHABLE();\r
@@ -1339,6 +1346,7 @@ bool Context::isQueryParameterInt(GLenum pname)
        case GL_MAX_MODELVIEW_STACK_DEPTH:\r
        case GL_MAX_PROJECTION_STACK_DEPTH:\r
        case GL_MAX_TEXTURE_STACK_DEPTH:\r
+       case GL_MAX_TEXTURE_UNITS:\r
         return true;\r
        default:\r
                ASSERT(isQueryParameterFloat(pname) || isQueryParameterBool(pname));\r
@@ -1711,7 +1719,7 @@ GLenum Context::applyIndexBuffer(const void *indices, GLsizei count, GLenum mode
 \r
 void Context::applyTextures()\r
 {\r
-    for(int samplerIndex = 0; samplerIndex < MAX_TEXTURE_IMAGE_UNITS; samplerIndex++)\r
+    for(int samplerIndex = 0; samplerIndex < MAX_TEXTURE_UNITS; samplerIndex++)\r
     {\r
                UNIMPLEMENTED();\r
         TextureType textureType = TEXTURE_2D;\r
@@ -2259,7 +2267,7 @@ void Context::detachTexture(GLuint texture)
 \r
     for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)\r
     {\r
-        for(int sampler = 0; sampler < MAX_TEXTURE_IMAGE_UNITS; sampler++)\r
+        for(int sampler = 0; sampler < MAX_TEXTURE_UNITS; sampler++)\r
         {\r
             if(mState.samplerTexture[type][sampler].id() == texture)\r
             {\r
index 24b621f..cbd91e5 100644 (file)
@@ -63,7 +63,7 @@ enum
 {\r
     MAX_VERTEX_ATTRIBS = 16,\r
     MAX_VARYING_VECTORS = 10,\r
-    MAX_TEXTURE_IMAGE_UNITS = 16,\r
+    MAX_TEXTURE_UNITS = 2,\r
     MAX_DRAW_BUFFERS = 1,\r
        MAX_LIGHTS = 8,\r
 \r
@@ -247,7 +247,7 @@ struct State
     BindingPointer<Renderbuffer> renderbuffer;\r
 \r
     VertexAttribute vertexAttribute[MAX_VERTEX_ATTRIBS];\r
-    BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][MAX_TEXTURE_IMAGE_UNITS];\r
+    BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][MAX_TEXTURE_UNITS];\r
 \r
     GLint unpackAlignment;\r
     GLint packAlignment;\r
@@ -313,6 +313,8 @@ public:
        void setLightAttenuationLinear(int index, float linear);\r
        void setLightAttenuationQuadratic(int index, float quadratic);\r
 \r
+    void setTexture2D(bool enabled);\r
+\r
     void setLineWidth(GLfloat width);\r
 \r
     void setGenerateMipmapHint(GLenum hint);\r
@@ -494,6 +496,8 @@ private:
        sw::MatrixStack textureStack0;\r
        sw::MatrixStack textureStack1;\r
 \r
+       bool texture2D;\r
+\r
     ResourceManager *mResourceManager;\r
 \r
        static Device *device;\r
index 2b9ffe8..2e42229 100644 (file)
@@ -351,7 +351,7 @@ void GL_APIENTRY glActiveTexture(GLenum texture)
 \r
         if(context)\r
         {\r
-            if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es1::MAX_TEXTURE_IMAGE_UNITS - 1)\r
+            if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es1::MAX_TEXTURE_UNITS - 1)\r
             {\r
                 return error(GL_INVALID_ENUM);\r
             }\r
@@ -1587,7 +1587,7 @@ void GL_APIENTRY glDisable(GLenum cap)
                        case GL_LIGHT6:                   context->setLight(6, false);              break;\r
                        case GL_LIGHT7:                   context->setLight(7, false);              break;\r
                        case GL_FOG:                      UNIMPLEMENTED(); break;\r
-                       case GL_TEXTURE_2D:               UNIMPLEMENTED(); break;\r
+                       case GL_TEXTURE_2D:               context->setTexture2D(false);             break;\r
                        case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;\r
                        case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;\r
                        case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;\r
@@ -1707,7 +1707,7 @@ void GL_APIENTRY glEnable(GLenum cap)
                        case GL_LIGHT6:                   context->setLight(6, true);              break;\r
                        case GL_LIGHT7:                   context->setLight(7, true);              break;\r
                        case GL_FOG:                      UNIMPLEMENTED(); break;\r
-                       case GL_TEXTURE_2D:               UNIMPLEMENTED(); break;\r
+                       case GL_TEXTURE_2D:               context->setTexture2D(true);             break;\r
                        case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;\r
                        case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;\r
                        case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;\r