mTextureCubeMapZero = new TextureCubeMap(0);\r
mTextureExternalZero = new TextureExternal(0);\r
\r
- mState.transformFeedback = new TransformFeedback(0);\r
- mTransformFeedbackMap[0] = mState.transformFeedback;\r
-\r
mState.activeSampler = 0;\r
bindArrayBuffer(0);\r
bindElementArrayBuffer(0);\r
bindReadFramebuffer(0);\r
bindDrawFramebuffer(0);\r
bindRenderbuffer(0);\r
+ bindTransformFeedback(0);\r
\r
mState.currentProgram = 0;\r
\r
\r
Context::~Context()\r
{\r
- if(mState.currentProgram != 0)\r
- {\r
- Program *programObject = mResourceManager->getProgram(mState.currentProgram);\r
- if(programObject)\r
- {\r
- programObject->release();\r
- }\r
- mState.currentProgram = 0;\r
- }\r
+ if(mState.currentProgram != 0)\r
+ {\r
+ Program *programObject = mResourceManager->getProgram(mState.currentProgram);\r
+ if(programObject)\r
+ {\r
+ programObject->release();\r
+ }\r
+ mState.currentProgram = 0;\r
+ }\r
\r
- while(!mFramebufferMap.empty())\r
- {\r
- deleteFramebuffer(mFramebufferMap.begin()->first);\r
- }\r
+ while(!mFramebufferMap.empty())\r
+ {\r
+ deleteFramebuffer(mFramebufferMap.begin()->first);\r
+ }\r
\r
- while(!mFenceMap.empty())\r
- {\r
- deleteFence(mFenceMap.begin()->first);\r
- }\r
+ while(!mFenceMap.empty())\r
+ {\r
+ deleteFence(mFenceMap.begin()->first);\r
+ }\r
\r
while(!mQueryMap.empty())\r
- {\r
- deleteQuery(mQueryMap.begin()->first);\r
- }\r
+ {\r
+ deleteQuery(mQueryMap.begin()->first);\r
+ }\r
\r
- for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)\r
- {\r
- for(int sampler = 0; sampler < MAX_COMBINED_TEXTURE_IMAGE_UNITS; sampler++)\r
- {\r
- mState.samplerTexture[type][sampler] = NULL;\r
- }\r
- }\r
+ while(!mVertexArrayMap.empty())\r
+ {\r
+ deleteVertexArray(mVertexArrayMap.begin()->first);\r
+ }\r
\r
- for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)\r
- {\r
- mState.vertexAttribute[i].mBoundBuffer = NULL;\r
- }\r
+ while(!mTransformFeedbackMap.empty())\r
+ {\r
+ deleteTransformFeedback(mTransformFeedbackMap.begin()->first);\r
+ }\r
+\r
+ while(!mSamplerMap.empty())\r
+ {\r
+ deleteSampler(mSamplerMap.begin()->first);\r
+ }\r
+\r
+ for(int type = 0; type < TEXTURE_TYPE_COUNT; type++)\r
+ {\r
+ for(int sampler = 0; sampler < MAX_COMBINED_TEXTURE_IMAGE_UNITS; sampler++)\r
+ {\r
+ mState.samplerTexture[type][sampler] = NULL;\r
+ }\r
+ }\r
+\r
+ for(int i = 0; i < MAX_VERTEX_ATTRIBS; i++)\r
+ {\r
+ mState.vertexAttribute[i].mBoundBuffer = NULL;\r
+ }\r
\r
for(int i = 0; i < QUERY_TYPE_COUNT; i++)\r
- {\r
- mState.activeQuery[i] = NULL;\r
- }\r
+ {\r
+ mState.activeQuery[i] = NULL;\r
+ }\r
\r
- mState.arrayBuffer = NULL;\r
- mState.elementArrayBuffer = NULL;\r
- mState.renderbuffer = NULL;\r
+ mState.arrayBuffer = NULL;\r
+ mState.elementArrayBuffer = NULL;\r
+ mState.renderbuffer = NULL;\r
+\r
+ mState.vertexArray = NULL;\r
+ for(int i = 0; i < MAX_COMBINED_TEXTURE_IMAGE_UNITS; ++i)\r
+ {\r
+ mState.sampler[i] = NULL;\r
+ }\r
\r
mTexture2DZero = NULL;\r
mTexture3DZero = NULL;\r
if(transformFeedbackObject != mTransformFeedbackMap.end())\r
{\r
mTransformFeedbackNameSpace.release(transformFeedbackObject->first);\r
-\r
- if(transformFeedbackObject->second)\r
- {\r
- transformFeedbackObject->second->release();\r
- }\r
-\r
+ delete transformFeedbackObject->second;\r
mTransformFeedbackMap.erase(transformFeedbackObject);\r
}\r
}\r
\r
bool Context::bindTransformFeedback(GLuint id)\r
{\r
- TransformFeedback* transformFeedback = getTransformFeedback(id);\r
-\r
- if(transformFeedback)\r
+ if(!getTransformFeedback(id))\r
{\r
- mState.transformFeedback = transformFeedback;\r
- return true;\r
+ mTransformFeedbackMap[id] = new TransformFeedback(id);\r
}\r
\r
- return false;\r
+ mState.transformFeedback = id;\r
+\r
+ return true;\r
}\r
\r
bool Context::bindSampler(GLuint unit, GLuint sampler)\r
case GL_DITHER: *params = mState.dither; break;\r
case GL_PRIMITIVE_RESTART_FIXED_INDEX: *params = mState.primitiveRestartFixedIndex; break;\r
case GL_RASTERIZER_DISCARD: *params = mState.rasterizerDiscard; break;\r
- case GL_TRANSFORM_FEEDBACK_ACTIVE:\r
- if(mState.transformFeedback)\r
+ case GL_TRANSFORM_FEEDBACK_ACTIVE:\r
+ {\r
+ TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);\r
+ if(transformFeedback)\r
{\r
- *params = mState.transformFeedback->isActive();\r
+ *params = transformFeedback->isActive();\r
break;\r
}\r
else return false;\r
+ }\r
case GL_TRANSFORM_FEEDBACK_PAUSED:\r
- if(mState.transformFeedback)\r
+ {\r
+ TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);\r
+ if(transformFeedback)\r
{\r
- *params = mState.transformFeedback->isPaused();\r
+ *params = transformFeedback->isPaused();\r
break;\r
}\r
else return false;\r
+ }\r
default:\r
return false;\r
}\r
{\r
UNIMPLEMENTED();\r
\r
+ TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);\r
+ if(!transformFeedback)\r
+ {\r
+ return false;\r
+ }\r
+\r
switch(pname)\r
{\r
case GL_TRANSFORM_FEEDBACK_BINDING: // GLint, initially 0\r
*param = 0;\r
break;\r
case GL_TRANSFORM_FEEDBACK_ACTIVE: // boolean, initially GL_FALSE\r
- if(mState.transformFeedback)\r
- {\r
- *param = mState.transformFeedback->isActive();\r
- break;\r
- }\r
- else return false;\r
+ *param = transformFeedback->isActive();\r
+ break;\r
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: // name, initially 0\r
- if(mState.transformFeedback && mState.transformFeedback->getGenericBuffer())\r
- {\r
- *param = mState.transformFeedback->getGenericBuffer()->name;\r
- break;\r
- }\r
- else return false;\r
+ *param = transformFeedback->name;\r
+ break;\r
case GL_TRANSFORM_FEEDBACK_PAUSED: // boolean, initially GL_FALSE\r
- if(mState.transformFeedback)\r
- {\r
- *param = mState.transformFeedback->isPaused();\r
- break;\r
- }\r
- else return false;\r
+ *param = transformFeedback->isPaused();\r
+ break;\r
case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0\r
- if(mState.transformFeedback && mState.transformFeedback->getGenericBuffer())\r
+ if(transformFeedback->getGenericBuffer())\r
{\r
- *param = mState.transformFeedback->getGenericBuffer()->size();\r
+ *param = transformFeedback->getGenericBuffer()->size();\r
break;\r
}\r
else return false;\r