Makes the State struct a member of Context, rather than its parent.
Signed-off-by: Andrew Lewycky
Signed-off-by: Daniel Koch

Author:    Shannon Woods

git-svn-id: https://angleproject.googlecode.com/svn/trunk@226 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 6199fc3..ec127bd 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -44,7 +44,7 @@
 
         if (context)
         {
-            context->activeSampler = texture - GL_TEXTURE0;
+            context->setActiveSampler(texture - GL_TEXTURE0);
         }
     }
     catch(std::bad_alloc&)
@@ -269,10 +269,7 @@
 
         if (context)
         {
-            context->blendColor.red = gl::clamp01(red);
-            context->blendColor.blue = gl::clamp01(blue);
-            context->blendColor.green = gl::clamp01(green);
-            context->blendColor.alpha = gl::clamp01(alpha);
+            context->setBlendColor(gl::clamp01(red), gl::clamp01(green), gl::clamp01(blue), gl::clamp01(alpha));
         }
     }
     catch(std::bad_alloc&)
@@ -316,8 +313,7 @@
 
         if (context)
         {
-            context->blendEquationRGB = modeRGB;
-            context->blendEquationAlpha = modeAlpha;
+            context->setBlendEquation(modeRGB, modeAlpha);
         }
     }
     catch(std::bad_alloc&)
@@ -440,10 +436,7 @@
 
         if (context)
         {
-            context->sourceBlendRGB = srcRGB;
-            context->sourceBlendAlpha = srcAlpha;
-            context->destBlendRGB = dstRGB;
-            context->destBlendAlpha = dstAlpha;
+            context->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
         }
     }
     catch(std::bad_alloc&)
@@ -676,10 +669,7 @@
 
         if (context)
         {
-            context->colorMaskRed = red != GL_FALSE;
-            context->colorMaskGreen = green != GL_FALSE;
-            context->colorMaskBlue = blue != GL_FALSE;
-            context->colorMaskAlpha = alpha != GL_FALSE;
+            context->setColorMask(red != GL_FALSE, green != GL_FALSE, blue != GL_FALSE, alpha != GL_FALSE);
         }
     }
     catch(std::bad_alloc&)
@@ -1028,7 +1018,7 @@
 
                 if (context)
                 {
-                    context->cullMode = mode;
+                    context->setCullMode(mode);
                 }
             }
             break;
@@ -1253,7 +1243,7 @@
 
         if (context)
         {
-            context->depthFunc = func;
+            context->setDepthFunc(func);
         }
     }
     catch(std::bad_alloc&)
@@ -1272,7 +1262,7 @@
 
         if (context)
         {
-            context->depthMask = flag != GL_FALSE;
+            context->setDepthMask(flag != GL_FALSE);
         }
     }
     catch(std::bad_alloc&)
@@ -1291,8 +1281,7 @@
 
         if (context)
         {
-            context->zNear = zNear;
-            context->zFar = zFar;
+            context->setDepthRange(zNear, zFar);
         }
     }
     catch(std::bad_alloc&)
@@ -1366,15 +1355,15 @@
         {
             switch (cap)
             {
-              case GL_CULL_FACE:                context->cullFace = false;              break;
-              case GL_POLYGON_OFFSET_FILL:      context->polygonOffsetFill = false;     break;
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: context->sampleAlphaToCoverage = false; break;
-              case GL_SAMPLE_COVERAGE:          context->sampleCoverage = false;        break;
-              case GL_SCISSOR_TEST:             context->scissorTest = false;           break;
-              case GL_STENCIL_TEST:             context->stencilTest = false;           break;
-              case GL_DEPTH_TEST:               context->depthTest = false;             break;
-              case GL_BLEND:                    context->blend = false;                 break;
-              case GL_DITHER:                   context->dither = false;                break;
+              case GL_CULL_FACE:                context->setCullFace(false);              break;
+              case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(false);     break;
+              case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(false); break;
+              case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(false);        break;
+              case GL_SCISSOR_TEST:             context->setScissorTest(false);           break;
+              case GL_STENCIL_TEST:             context->setStencilTest(false);           break;
+              case GL_DEPTH_TEST:               context->setDepthTest(false);             break;
+              case GL_BLEND:                    context->setBlend(false);                 break;
+              case GL_DITHER:                   context->setDither(false);                break;
               default:
                 return error(GL_INVALID_ENUM);
             }
@@ -1401,7 +1390,7 @@
 
         if (context)
         {
-            context->vertexAttribute[index].mEnabled = false;
+            context->setVertexAttribEnabled(index, false);
         }
     }
     catch(std::bad_alloc&)
@@ -1480,15 +1469,15 @@
         {
             switch (cap)
             {
-              case GL_CULL_FACE:                context->cullFace = true;              break;
-              case GL_POLYGON_OFFSET_FILL:      context->polygonOffsetFill = true;     break;
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: context->sampleAlphaToCoverage = true; break;
-              case GL_SAMPLE_COVERAGE:          context->sampleCoverage = true;        break;
-              case GL_SCISSOR_TEST:             context->scissorTest = true;           break;
-              case GL_STENCIL_TEST:             context->stencilTest = true;           break;
-              case GL_DEPTH_TEST:               context->depthTest = true;             break;
-              case GL_BLEND:                    context->blend = true;                 break;
-              case GL_DITHER:                   context->dither = true;                break;
+              case GL_CULL_FACE:                context->setCullFace(true);              break;
+              case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(true);     break;
+              case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(true); break;
+              case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(true);        break;
+              case GL_SCISSOR_TEST:             context->setScissorTest(true);           break;
+              case GL_STENCIL_TEST:             context->setStencilTest(true);           break;
+              case GL_DEPTH_TEST:               context->setDepthTest(true);             break;
+              case GL_BLEND:                    context->setBlend(true);                 break;
+              case GL_DITHER:                   context->setDither(true);                break;
               default:
                 return error(GL_INVALID_ENUM);
             }
@@ -1515,7 +1504,7 @@
 
         if (context)
         {
-            context->vertexAttribute[index].mEnabled = true;
+            context->setVertexAttribEnabled(index, true);
         }
     }
     catch(std::bad_alloc&)
@@ -1580,7 +1569,7 @@
         {
             gl::Framebuffer *framebuffer = context->getFramebuffer();
 
-            if (context->framebuffer == 0 || !framebuffer)
+            if (context->getFramebufferHandle() == 0 || !framebuffer)
             {
                 return error(GL_INVALID_OPERATION);
             }
@@ -1679,7 +1668,7 @@
 
             gl::Framebuffer *framebuffer = context->getFramebuffer();
 
-            if (context->framebuffer == 0 || !framebuffer)
+            if (context->getFramebufferHandle() == 0 || !framebuffer)
             {
                 return error(GL_INVALID_OPERATION);
             }
@@ -1713,7 +1702,7 @@
 
                 if (context)
                 {
-                    context->frontFace = mode;
+                    context->setFrontFace(mode);
                 }
             }
             break;
@@ -2235,7 +2224,7 @@
 
         if (context)
         {
-            if (context->framebuffer == 0)
+            if (context->getFramebufferHandle() == 0)
             {
                 return error(GL_INVALID_OPERATION);
             }
@@ -2497,12 +2486,12 @@
                 return error(GL_INVALID_ENUM);
             }
 
-            if (context->renderbuffer == 0)
+            if (context->getRenderbufferHandle() == 0)
             {
                 return error(GL_INVALID_OPERATION);
             }
 
-            gl::Renderbuffer *renderbuffer = context->getRenderbuffer(context->renderbuffer);
+            gl::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferHandle());
 
             switch (pname)
             {
@@ -3001,30 +2990,32 @@
                 return error(GL_INVALID_VALUE);
             }
 
+            gl::AttributeState attribState = context->getVertexAttribState(index);
+
             switch (pname)
             {
               case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
-                *params = (GLfloat)(context->vertexAttribute[index].mEnabled ? GL_TRUE : GL_FALSE);
+                *params = (GLfloat)(attribState.mEnabled ? GL_TRUE : GL_FALSE);
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_SIZE:
-                *params = (GLfloat)context->vertexAttribute[index].mSize;
+                *params = (GLfloat)attribState.mSize;
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
-                *params = (GLfloat)context->vertexAttribute[index].mStride;
+                *params = (GLfloat)attribState.mStride;
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_TYPE:
-                *params = (GLfloat)context->vertexAttribute[index].mType;
+                *params = (GLfloat)attribState.mType;
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
-                *params = (GLfloat)(context->vertexAttribute[index].mNormalized ? GL_TRUE : GL_FALSE);
+                *params = (GLfloat)(attribState.mNormalized ? GL_TRUE : GL_FALSE);
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
-                *params = (GLfloat)context->vertexAttribute[index].mBoundBuffer;
+                *params = (GLfloat)attribState.mBoundBuffer;
                 break;
               case GL_CURRENT_VERTEX_ATTRIB:
                 for (int i = 0; i < 4; ++i)
                 {
-                    params[i] = context->vertexAttribute[index].mCurrentValue[i];
+                    params[i] = attribState.mCurrentValue[i];
                 }
                 break;
               default: return error(GL_INVALID_ENUM);
@@ -3052,30 +3043,32 @@
                 return error(GL_INVALID_VALUE);
             }
 
+            gl::AttributeState attribState = context->getVertexAttribState(index);
+
             switch (pname)
             {
               case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
-                *params = (context->vertexAttribute[index].mEnabled ? GL_TRUE : GL_FALSE);
+                *params = (attribState.mEnabled ? GL_TRUE : GL_FALSE);
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_SIZE:
-                *params = context->vertexAttribute[index].mSize;
+                *params = attribState.mSize;
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
-                *params = context->vertexAttribute[index].mStride;
+                *params = attribState.mStride;
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_TYPE:
-                *params = context->vertexAttribute[index].mType;
+                *params = attribState.mType;
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
-                *params = (context->vertexAttribute[index].mNormalized ? GL_TRUE : GL_FALSE);
+                *params = (attribState.mNormalized ? GL_TRUE : GL_FALSE);
                 break;
               case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
-                *params = context->vertexAttribute[index].mBoundBuffer;
+                *params = attribState.mBoundBuffer;
                 break;
               case GL_CURRENT_VERTEX_ATTRIB:
                 for (int i = 0; i < 4; ++i)
                 {
-                    float currentValue = context->vertexAttribute[index].mCurrentValue[i];
+                    float currentValue = attribState.mCurrentValue[i];
                     params[i] = (GLint)(currentValue > 0.0f ? floor(currentValue + 0.5f) : ceil(currentValue - 0.5f));
                 }
                 break;
@@ -3109,7 +3102,7 @@
                 return error(GL_INVALID_ENUM);
             }
 
-            *pointer = const_cast<GLvoid*>(context->vertexAttribute[index].mPointer);
+            *pointer = const_cast<GLvoid*>(context->getVertexAttribPointer(index));
         }
     }
     catch(std::bad_alloc&)
@@ -3145,7 +3138,7 @@
         if (context)
         {
             if (target == GL_GENERATE_MIPMAP_HINT)
-                context->generateMipmapHint = mode;
+                context->setGenerateMipmapHint(mode);
         }
     }
     catch(std::bad_alloc&)
@@ -3192,15 +3185,15 @@
         {
             switch (cap)
             {
-              case GL_CULL_FACE:                return context->cullFace;
-              case GL_POLYGON_OFFSET_FILL:      return context->polygonOffsetFill;
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->sampleAlphaToCoverage;
-              case GL_SAMPLE_COVERAGE:          return context->sampleCoverage;
-              case GL_SCISSOR_TEST:             return context->scissorTest;
-              case GL_STENCIL_TEST:             return context->stencilTest;
-              case GL_DEPTH_TEST:               return context->depthTest;
-              case GL_BLEND:                    return context->blend;
-              case GL_DITHER:                   return context->dither;
+              case GL_CULL_FACE:                return context->isCullFaceEnabled();
+              case GL_POLYGON_OFFSET_FILL:      return context->isPolygonOffsetFillEnabled();
+              case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->isSampleAlphaToCoverageEnabled();
+              case GL_SAMPLE_COVERAGE:          return context->isSampleCoverageEnabled();
+              case GL_SCISSOR_TEST:             return context->isScissorTestEnabled();
+              case GL_STENCIL_TEST:             return context->isStencilTestEnabled();
+              case GL_DEPTH_TEST:               return context->isDepthTestEnabled();
+              case GL_BLEND:                    return context->isBlendEnabled();
+              case GL_DITHER:                   return context->isDitherEnabled();
               default:
                 return error(GL_INVALID_ENUM, false);
             }
@@ -3359,7 +3352,7 @@
 
         if (context)
         {
-            context->lineWidth = width;
+            context->setLineWidth(width);
         }
     }
     catch(std::bad_alloc&)
@@ -3419,7 +3412,7 @@
                     return error(GL_INVALID_VALUE);
                 }
 
-                context->unpackAlignment = param;
+                context->setUnpackAlignment(param);
                 break;
 
               case GL_PACK_ALIGNMENT:
@@ -3428,7 +3421,7 @@
                     return error(GL_INVALID_VALUE);
                 }
 
-                context->packAlignment = param;
+                context->setPackAlignment(param);
                 break;
 
               default:
@@ -3452,8 +3445,7 @@
 
         if (context)
         {
-            context->polygonOffsetFactor = factor;
-            context->polygonOffsetUnits = units;
+            context->setPolygonOffsetParams(factor, units);
         }
     }
     catch(std::bad_alloc&)
@@ -3562,7 +3554,7 @@
 
         if (context)
         {
-            if (context->framebuffer == 0 || context->renderbuffer == 0)
+            if (context->getFramebufferHandle() == 0 || context->getRenderbufferHandle() == 0)
             {
                 return error(GL_INVALID_OPERATION);
             }
@@ -3601,8 +3593,7 @@
 
         if (context)
         {
-            context->sampleCoverageValue = gl::clamp01(value);
-            context->sampleCoverageInvert = invert;
+            context->setSampleCoverageParams(gl::clamp01(value), invert);
         }
     }
     catch(std::bad_alloc&)
@@ -3626,10 +3617,7 @@
 
         if (context)
         {
-            context->scissorX = x;
-            context->scissorY = y;
-            context->scissorWidth = width;
-            context->scissorHeight = height;
+            context->setScissorParams(x, y, width, height);
         }
     }
     catch(std::bad_alloc&)
@@ -3736,16 +3724,12 @@
         {
             if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
             {
-                context->stencilFunc = func;
-                context->stencilRef = ref;
-                context->stencilMask = mask;
+                context->setStencilParams(func, ref, mask);
             }
 
             if (face == GL_BACK || face == GL_FRONT_AND_BACK)
             {
-                context->stencilBackFunc = func;
-                context->stencilBackRef = ref;
-                context->stencilBackMask = mask;
+                context->setStencilBackParams(func, ref, mask);
             }
         }
     }
@@ -3782,12 +3766,12 @@
         {
             if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
             {
-                context->stencilWritemask = mask;
+                context->setStencilWritemask(mask);
             }
 
             if (face == GL_BACK || face == GL_FRONT_AND_BACK)
             {
-                context->stencilBackWritemask = mask;
+                context->setStencilBackWritemask(mask);
             }
         }
     }
@@ -3870,16 +3854,12 @@
         {
             if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
             {
-                context->stencilFail = fail;
-                context->stencilPassDepthFail = zfail;
-                context->stencilPassDepthPass = zpass;
+                context->setStencilOperations(fail, zfail, zpass);
             }
 
             if (face == GL_BACK || face == GL_FRONT_AND_BACK)
             {
-                context->stencilBackFail = fail;
-                context->stencilBackPassDepthFail = zfail;
-                context->stencilBackPassDepthPass = zpass;
+                context->setStencilBackOperations(fail, zfail, zpass);
             }
         }
     }
@@ -3997,7 +3977,7 @@
                     return error(GL_INVALID_OPERATION);
                 }
 
-                texture->setImage(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                texture->setImage(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
             }
             else
             {
@@ -4011,22 +3991,22 @@
                 switch (target)
                 {
                   case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
-                    texture->setImagePosX(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                    texture->setImagePosX(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
                     break;
                   case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
-                    texture->setImageNegX(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                    texture->setImageNegX(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
                     break;
                   case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
-                    texture->setImagePosY(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                    texture->setImagePosY(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
                     break;
                   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
-                    texture->setImageNegY(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                    texture->setImageNegY(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
                     break;
                   case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
-                    texture->setImagePosZ(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                    texture->setImagePosZ(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
                     break;
                   case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
-                    texture->setImageNegZ(level, internalformat, width, height, format, type, context->unpackAlignment, pixels);
+                    texture->setImageNegZ(level, internalformat, width, height, format, type, context->getUnpackAlignment(), pixels);
                     break;
                   default: UNREACHABLE();
                 }
@@ -4163,7 +4143,7 @@
                     return error(GL_INVALID_OPERATION);
                 }
 
-                texture->subImage(level, xoffset, yoffset, width, height, format, type, context->unpackAlignment, pixels);
+                texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
             }
             else if (gl::IsCubemapTextureTarget(target))
             {
@@ -4174,7 +4154,7 @@
                     return error(GL_INVALID_OPERATION);
                 }
 
-                texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->unpackAlignment, pixels);
+                texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);
             }
             else
             {
@@ -4982,12 +4962,7 @@
 
         if (context)
         {
-            context->vertexAttribute[index].mBoundBuffer = context->arrayBuffer;
-            context->vertexAttribute[index].mSize = size;
-            context->vertexAttribute[index].mType = type;
-            context->vertexAttribute[index].mNormalized = (normalized == GL_TRUE);
-            context->vertexAttribute[index].mStride = stride;
-            context->vertexAttribute[index].mPointer = ptr;
+            context->setVertexAttribState(index, context->getArrayBufferHandle(), size, type, (normalized == GL_TRUE), stride, ptr);
         }
     }
     catch(std::bad_alloc&)
@@ -5011,10 +4986,7 @@
 
         if (context)
         {
-            context->viewportX = x;
-            context->viewportY = y;
-            context->viewportWidth = width;
-            context->viewportHeight = height;
+            context->setViewportParams(x, y, width, height);
         }
     }
     catch(std::bad_alloc&)