+
+GLboolean glIsEnabled(GLenum cap)
+{
+ FlushOnStateChange( );
+
+ if( skipnanogl )
+ {
+ return glEsImpl->glIsEnabled(cap);
+ }
+
+ switch ( cap )
+ {
+ case GL_ALPHA_TEST:
+ return nanoglState.alpha_test;
+ case GL_BLEND:
+ return nanoglState.blend;
+ case GL_COLOR_LOGIC_OP:
+ return nanoglState.color_logic_op;
+ case GL_COLOR_MATERIAL:
+ return nanoglState.color_material;
+ case GL_CULL_FACE:
+ return nanoglState.cull_face;
+ case GL_DEPTH_TEST:
+ return nanoglState.depth_test;
+ case GL_DITHER:
+ return nanoglState.dither;
+ case GL_FOG:
+ return nanoglState.fog;
+ case GL_LIGHT0:
+ return nanoglState.light0;
+ case GL_LIGHT1:
+ return nanoglState.light1;
+ case GL_LIGHT2:
+ return nanoglState.light2;
+ case GL_LIGHT3:
+ return nanoglState.light3;
+ case GL_LIGHT4:
+ return nanoglState.light4;
+ case GL_LIGHT5:
+ return nanoglState.light5;
+ case GL_LIGHT6:
+ return nanoglState.light6;
+ case GL_LIGHT7:
+ return nanoglState.light7;
+ case GL_LIGHTING:
+ return nanoglState.lighting;
+ case GL_LINE_SMOOTH:
+ return nanoglState.line_smooth;
+ case GL_MULTISAMPLE:
+ return nanoglState.multisample;
+ case GL_NORMALIZE:
+ return nanoglState.normalize;
+ case GL_POLYGON_OFFSET_FILL:
+ return nanoglState.polygon_offset_fill;
+ case GL_RESCALE_NORMAL:
+ return nanoglState.rescale_normal;
+ case GL_SAMPLE_ALPHA_TO_COVERAGE:
+ return nanoglState.sample_alpha_to_coverage;
+ case GL_SAMPLE_ALPHA_TO_ONE:
+ return nanoglState.sample_alpha_to_one;
+ case GL_SAMPLE_COVERAGE:
+ return nanoglState.sample_coverage;
+ case GL_SCISSOR_TEST:
+ return nanoglState.scissor_test;
+ case GL_STENCIL_TEST:
+ return nanoglState.stencil_test;
+ case GL_TEXTURE_2D:
+ return activetmuState->texture_2d.value;
+ default:
+ return glIsEnabled(cap);
+ }
+}
+
+void glPushAttrib(GLbitfield mask)
+{
+ FlushOnStateChange( );
+
+ if( (attribStackCount < 0) || (attribStackCount > MAX_ATTRIB_STACK) )
+ {
+ return;
+ }
+
+ attribStack[attribStackCount].mask = mask;
+
+ if( mask & GL_ENABLE_BIT )
+ {
+ for(int i = 0; i < STACK_ATTRIB_ENABLE_BIT_LEN; i++)
+ {
+ attribStack[attribStackCount].enable[i] = glIsEnabled(stackAttribEnableBit[i]);
+ }
+ }
+
+ if( mask & GL_COLOR_BUFFER_BIT )
+ {
+ // TODO
+ }
+
+ if( mask & GL_CURRENT_BIT )
+ {
+ // TODO
+ }
+
+ attribStackCount += 1;
+}
+
+void glPopAttrib()
+{
+ FlushOnStateChange( );
+
+ attribStackCount -= 1;
+ if((attribStackCount < 0) || (attribStackCount > MAX_ATTRIB_STACK))
+ {
+ attribStackCount += 1;
+ return;
+ }
+
+ GLbitfield mask = attribStack[attribStackCount].mask;
+
+ if( mask & GL_ENABLE_BIT )
+ {
+ for(int i = 0; i < STACK_ATTRIB_ENABLE_BIT_LEN; i++)
+ {
+ if( attribStack[attribStackCount].enable[i] )
+ {
+ glEnable(stackAttribEnableBit[i]);
+ }
+ else
+ {
+ glDisable(stackAttribEnableBit[i]);
+ }
+ }
+ }
+
+ if( mask & GL_COLOR_BUFFER_BIT )
+ {
+ // TODO
+ }
+
+ if( mask & GL_CURRENT_BIT )
+ {
+ // TODO
+ }
+}