1 #ifndef __TEST_GL_ABSTRACTION_H__
2 #define __TEST_GL_ABSTRACTION_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
27 #include <cstring> // for strcmp
30 #include <dali/public-api/dali-core.h>
31 #include <dali/integration-api/core.h>
32 #include <dali/integration-api/gl-abstraction.h>
33 #include <dali/integration-api/gl-defines.h>
34 #include "test-trace-call-stack.h"
39 static const unsigned int MAX_ATTRIBUTE_CACHE_SIZE = 64;
40 static const char *mStdAttribs[MAX_ATTRIBUTE_CACHE_SIZE] =
42 "aPosition", // ATTRIB_POSITION
43 "aNormal", // ATTRIB_NORMAL
44 "aTexCoord", // ATTRIB_TEXCOORD
45 "aColor", // ATTRIB_COLOR
46 "aBoneWeights", // ATTRIB_BONE_WEIGHTS
47 "aBoneIndices" // ATTRIB_BONE_INDICES
50 class DALI_IMPORT_API TestGlAbstraction: public Dali::Integration::GlAbstraction
62 inline void ActiveTexture( GLenum textureUnit )
64 mActiveTextureUnit = textureUnit - GL_TEXTURE0;
67 inline GLenum GetActiveTextureUnit() const
69 return mActiveTextureUnit + GL_TEXTURE0;
72 inline void AttachShader( GLuint program, GLuint shader )
74 std::stringstream out;
75 out << program << ", " << shader;
76 mShaderTrace.PushCall("AttachShader", out.str());
79 inline void BindAttribLocation( GLuint program, GLuint index, const char* name )
83 inline void BindBuffer( GLenum target, GLuint buffer )
87 inline void BindFramebuffer( GLenum target, GLuint framebuffer )
90 mFramebufferStatus |= 2;
93 inline void BindRenderbuffer( GLenum target, GLuint renderbuffer )
98 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
99 * @return A vector containing the IDs that were bound.
101 inline const std::vector<GLuint>& GetBoundTextures() const
103 return mBoundTextures;
107 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
108 * @param[in] activeTextureUnit The specific active texture unit.
109 * @return A vector containing the IDs that were bound.
111 inline const std::vector<GLuint>& GetBoundTextures( GLuint activeTextureUnit ) const
113 return mActiveTextures[ activeTextureUnit - GL_TEXTURE0 ].mBoundTextures;
117 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
119 inline void ClearBoundTextures()
121 mBoundTextures.clear();
123 for( unsigned int i=0; i<MIN_TEXTURE_UNIT_LIMIT; ++i )
125 mActiveTextures[ i ].mBoundTextures.clear();
129 inline void BindTexture( GLenum target, GLuint texture )
131 // Record the bound textures for future checks
134 mBoundTextures.push_back( texture );
136 if( mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT )
138 mActiveTextures[ mActiveTextureUnit ].mBoundTextures.push_back( texture );
142 std::stringstream out;
143 out << target << ", " << texture;
144 mTextureTrace.PushCall("BindTexture", out.str());
147 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
149 mLastBlendColor.r = red;
150 mLastBlendColor.g = green;
151 mLastBlendColor.b = blue;
152 mLastBlendColor.a = alpha;
155 inline const Vector4& GetLastBlendColor() const
157 return mLastBlendColor;
160 inline void BlendEquation( GLenum mode )
162 mLastBlendEquationRgb = mode;
163 mLastBlendEquationAlpha = mode;
166 inline void BlendEquationSeparate( GLenum modeRgb, GLenum modeAlpha )
168 mLastBlendEquationRgb = modeRgb;
169 mLastBlendEquationAlpha = modeAlpha;
172 inline GLenum GetLastBlendEquationRgb() const
174 return mLastBlendEquationRgb;
177 inline GLenum GetLastBlendEquationAlpha() const
179 return mLastBlendEquationAlpha;
182 inline void BlendFunc(GLenum sfactor, GLenum dfactor)
184 mLastBlendFuncSrcRgb = sfactor;
185 mLastBlendFuncDstRgb = dfactor;
186 mLastBlendFuncSrcAlpha = sfactor;
187 mLastBlendFuncDstAlpha = dfactor;
190 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
192 mLastBlendFuncSrcRgb = srcRGB;
193 mLastBlendFuncDstRgb = dstRGB;
194 mLastBlendFuncSrcAlpha = srcAlpha;
195 mLastBlendFuncDstAlpha = dstAlpha;
198 inline GLenum GetLastBlendFuncSrcRgb() const
200 return mLastBlendFuncSrcRgb;
203 inline GLenum GetLastBlendFuncDstRgb() const
205 return mLastBlendFuncDstRgb;
208 inline GLenum GetLastBlendFuncSrcAlpha() const
210 return mLastBlendFuncSrcAlpha;
213 inline GLenum GetLastBlendFuncDstAlpha() const
215 return mLastBlendFuncDstAlpha;
218 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
220 mBufferDataCalls.push_back(size);
223 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
225 mBufferSubDataCalls.push_back(size);
228 inline GLenum CheckFramebufferStatus(GLenum target)
230 //If it has the three last bits set to 1 - 111, then the three minimum functions to create a
231 //Framebuffer texture have been called
232 if( mFramebufferStatus == 7 )
234 return GL_FRAMEBUFFER_COMPLETE;
237 return mCheckFramebufferStatusResult;
240 inline GLenum CheckFramebufferColorAttachment()
242 return mFramebufferColorAttached;
245 inline GLenum CheckFramebufferDepthAttachment()
247 return mFramebufferDepthAttached;
250 inline GLenum CheckFramebufferStencilAttachment()
252 return mFramebufferStencilAttached;
255 inline void Clear(GLbitfield mask)
258 mLastClearBitMask = mask;
261 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
265 inline void ClearDepthf(GLclampf depth)
269 inline void ClearStencil(GLint s)
273 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
277 inline void CompileShader(GLuint shader)
279 std::stringstream out;
281 mShaderTrace.PushCall("CompileShader", out.str());
284 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
288 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
292 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
296 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
300 inline GLuint CreateProgram(void)
302 mShaderTrace.PushCall("CreateProgram", "");
304 ++mLastProgramIdUsed;
305 mUniforms[mLastProgramIdUsed] = UniformIDMap();
306 return mLastProgramIdUsed;
309 inline GLuint CreateShader(GLenum type)
311 std::stringstream out;
313 mShaderTrace.PushCall("CreateShader", out.str());
315 return ++mLastShaderIdUsed;
318 inline void CullFace(GLenum mode)
320 std::stringstream out;
322 mCullFaceTrace.PushCall("CullFace", out.str());
325 inline void DeleteBuffers(GLsizei n, const GLuint* buffers)
329 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
333 inline void DeleteProgram(GLuint program)
335 std::stringstream out;
337 mShaderTrace.PushCall("DeleteProgram", out.str());
340 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
344 inline void DeleteShader(GLuint shader)
346 std::stringstream out;
348 mShaderTrace.PushCall("DeleteShader", out.str());
351 inline void DeleteTextures(GLsizei n, const GLuint* textures)
353 std::stringstream out;
354 out << n << ", " << textures << " = [";
356 for(GLsizei i=0; i<n; i++)
358 out << textures[i] << ", ";
359 mDeletedTextureIds.push_back(textures[i]);
362 mTextureTrace.PushCall("DeleteTextures", out.str());
365 inline bool CheckNoTexturesDeleted()
367 return mDeletedTextureIds.size() == 0;
370 inline bool CheckTextureDeleted( GLuint textureId )
374 for(std::vector<GLuint>::iterator iter=mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
376 if(*iter == textureId)
385 inline void ClearDeletedTextures()
387 mDeletedTextureIds.clear();
390 inline void DepthFunc(GLenum func)
392 std::stringstream out;
394 mDepthFunctionTrace.PushCall("DepthFunc", out.str());
397 inline void DepthMask(GLboolean flag)
401 inline void DepthRangef(GLclampf zNear, GLclampf zFar)
405 inline void DetachShader(GLuint program, GLuint shader)
407 std::stringstream out;
408 out << program << ", " << shader;
409 mShaderTrace.PushCall("DetachShader", out.str());
412 inline void Disable(GLenum cap)
414 std::stringstream out;
416 mEnableDisableTrace.PushCall("Disable", out.str());
419 inline void DisableVertexAttribArray(GLuint index)
421 SetVertexAttribArray( index, false );
424 inline void DrawArrays(GLenum mode, GLint first, GLsizei count)
426 std::stringstream out;
427 out << mode << ", " << first << ", " << count;
428 mDrawTrace.PushCall("DrawArrays", out.str());
431 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
433 std::stringstream out;
434 out << mode << ", " << count << ", " << type << ", indices";
435 mDrawTrace.PushCall("DrawElements", out.str());
438 inline void Enable(GLenum cap)
440 std::stringstream out;
442 mEnableDisableTrace.PushCall("Enable", out.str());
445 inline void EnableVertexAttribArray(GLuint index)
447 SetVertexAttribArray( index, true);
450 inline void Finish(void)
454 inline void Flush(void)
458 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
460 if (attachment == GL_DEPTH_ATTACHMENT)
462 mFramebufferDepthAttached = true;
464 else if (attachment == GL_STENCIL_ATTACHMENT)
466 mFramebufferStencilAttached = true;
470 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
473 mFramebufferStatus |= 4;
475 //We check 4 attachment colors
476 if ((attachment == GL_COLOR_ATTACHMENT0) || (attachment == GL_COLOR_ATTACHMENT1) || (attachment == GL_COLOR_ATTACHMENT2) || (attachment == GL_COLOR_ATTACHMENT4))
478 mFramebufferColorAttached = true;
482 inline void FrontFace(GLenum mode)
486 inline void GenBuffers(GLsizei n, GLuint* buffers)
488 // avoids an assert in GpuBuffers
492 inline void GenerateMipmap(GLenum target)
496 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers)
498 for( int i = 0; i < n; i++ )
500 framebuffers[i] = i + 1;
503 //Add 001 bit, this function needs to be called the first one in the chain
504 mFramebufferStatus = 1;
507 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
509 for( int i = 0; i < n; i++ )
511 renderbuffers[i] = i + 1;
516 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
517 * @param[in] ids A vector containing the next IDs to be generated
519 inline void SetNextTextureIds( const std::vector<GLuint>& ids )
521 mNextTextureIds = ids;
524 inline const std::vector<GLuint>& GetNextTextureIds()
526 return mNextTextureIds;
529 inline void GenTextures(GLsizei n, GLuint* textures)
531 for( int i=0; i<n; ++i )
533 if( !mNextTextureIds.empty() )
535 *(textures+i) = mNextTextureIds[0];
536 mNextTextureIds.erase( mNextTextureIds.begin() );
540 *(textures+i) = ++mLastAutoTextureIdUsed;
544 std::stringstream out;
545 for(int i=0; i<n; i++)
553 mTextureTrace.PushCall("GenTextures", out.str());
556 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
560 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
565 *length = snprintf(name, bufsize, "sTexture");
566 *type = GL_SAMPLER_2D;
570 *length = snprintf(name, bufsize, "sEffect");
571 *type = GL_SAMPLER_2D;
579 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
583 inline int GetAttribLocation(GLuint program, const char* name)
585 std::string attribName(name);
587 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
589 if( mStdAttribs[i] == attribName )
595 // 0 is a valid location
599 inline void GetBooleanv(GLenum pname, GLboolean* params)
603 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
607 inline GLenum GetError(void)
609 return mGetErrorResult;
612 inline void GetFloatv(GLenum pname, GLfloat* params)
616 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
620 inline void GetIntegerv(GLenum pname, GLint* params)
624 case GL_MAX_TEXTURE_SIZE:
627 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
630 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
631 *params = mNumBinaryFormats;
633 case GL_PROGRAM_BINARY_FORMATS_OES:
634 *params = mBinaryFormats;
639 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
644 *params = mLinkStatus;
646 case GL_PROGRAM_BINARY_LENGTH_OES:
647 *params = mProgramBinaryLength;
649 case GL_ACTIVE_UNIFORMS:
650 *params = mNumberOfActiveUniforms;
652 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
658 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
662 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
666 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
669 case GL_COMPILE_STATUS:
670 *params = mCompileStatus;
675 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
679 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
683 inline const GLubyte* GetString(GLenum name)
685 return mGetStringResult;
688 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
692 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
696 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
700 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
704 inline GLint GetUniformLocation(GLuint program, const char* name)
706 ProgramUniformMap::iterator it = mUniforms.find(program);
707 if( it == mUniforms.end() )
709 // Not a valid program ID
710 mGetErrorResult = GL_INVALID_OPERATION;
714 UniformIDMap& uniformIDs = it->second;
715 UniformIDMap::iterator it2 = uniformIDs.find( name );
716 if( it2 == uniformIDs.end() )
718 // Uniform not found, so add it...
719 uniformIDs[name] = ++mLastUniformIdUsed;
720 return mLastUniformIdUsed;
726 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
730 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
734 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
738 inline void Hint(GLenum target, GLenum mode)
742 inline GLboolean IsBuffer(GLuint buffer)
744 return mIsBufferResult;
747 inline GLboolean IsEnabled(GLenum cap)
749 return mIsEnabledResult;
752 inline GLboolean IsFramebuffer(GLuint framebuffer)
754 return mIsFramebufferResult;
757 inline GLboolean IsProgram(GLuint program)
759 return mIsProgramResult;
762 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
764 return mIsRenderbufferResult;
767 inline GLboolean IsShader(GLuint shader)
769 return mIsShaderResult;
772 inline GLboolean IsTexture(GLuint texture)
774 return mIsTextureResult;
777 inline void LineWidth(GLfloat width)
781 inline void LinkProgram(GLuint program)
783 std::stringstream out;
785 mShaderTrace.PushCall("LinkProgram", out.str());
787 mNumberOfActiveUniforms=2;
788 GetUniformLocation(program, "sTexture");
789 GetUniformLocation(program, "sEffect");
792 inline void PixelStorei(GLenum pname, GLint param)
796 inline void PolygonOffset(GLfloat factor, GLfloat units)
800 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
804 inline void ReleaseShaderCompiler(void)
808 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
812 inline void SampleCoverage(GLclampf value, GLboolean invert)
816 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
818 mScissorParams.x = x;
819 mScissorParams.y = y;
820 mScissorParams.width = width;
821 mScissorParams.height = height;
824 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
828 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
830 std::string stringBuilder;
831 for(int i = 0; i < count; ++i)
833 stringBuilder += string[i];
835 mShaderSources[shader] = stringBuilder;
836 mLastShaderCompiled = shader;
839 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
841 const std::string shaderSource = mShaderSources[shader];
842 if( static_cast<int>(shaderSource.length()) < bufsize )
844 strcpy(source, shaderSource.c_str());
845 *length = shaderSource.length();
849 *length = bufsize -1;
850 strncpy(source, shaderSource.c_str(), *length);
851 source[*length] = 0x0;
855 inline std::string GetShaderSource(GLuint shader)
857 return mShaderSources[shader];
860 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
864 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
868 inline void StencilMask(GLuint mask)
872 inline void StencilMaskSeparate(GLenum face, GLuint mask)
876 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
880 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
884 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
886 std::stringstream out;
887 out << width << ", " << height;
888 mTextureTrace.PushCall("TexImage2D", out.str());
891 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
893 std::stringstream out;
894 out << target << ", " << pname << ", " << param;
895 mTexParamaterTrace.PushCall("TexParameterf", out.str());
898 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
900 std::stringstream out;
901 out << target << ", " << pname << ", " << params[0];
902 mTexParamaterTrace.PushCall("TexParameterfv", out.str());
905 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
907 std::stringstream out;
908 out << target << ", " << pname << ", " << param;
909 mTexParamaterTrace.PushCall("TexParameteri", out.str());
912 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
914 std::stringstream out;
915 out << target << ", " << pname << ", " << params[0];
916 mTexParamaterTrace.PushCall("TexParameteriv", out.str());
919 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
921 std::stringstream out;
922 out << xoffset << ", " << yoffset << ", " << width << ", " << height;
923 mTextureTrace.PushCall("TexSubImage2D", out.str());
926 inline void Uniform1f(GLint location, GLfloat x)
928 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, x ) )
930 mGetErrorResult = GL_INVALID_OPERATION;
934 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
936 for( int i = 0; i < count; ++i )
938 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
940 mGetErrorResult = GL_INVALID_OPERATION;
946 inline void Uniform1i(GLint location, GLint x)
948 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
950 mGetErrorResult = GL_INVALID_OPERATION;
954 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
956 for( int i = 0; i < count; ++i )
958 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
962 mGetErrorResult = GL_INVALID_OPERATION;
968 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
970 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
974 mGetErrorResult = GL_INVALID_OPERATION;
978 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
980 for( int i = 0; i < count; ++i )
982 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
984 Vector2( v[2*i], v[2*i+1] ) ) )
986 mGetErrorResult = GL_INVALID_OPERATION;
992 inline void Uniform2i(GLint location, GLint x, GLint y)
996 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
1000 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
1002 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
1004 Vector3( x, y, z ) ) )
1006 mGetErrorResult = GL_INVALID_OPERATION;
1010 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
1012 for( int i = 0; i < count; ++i )
1014 if( ! mProgramUniforms3f.SetUniformValue(
1017 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
1019 mGetErrorResult = GL_INVALID_OPERATION;
1025 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
1029 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
1033 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1035 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
1037 Vector4( x, y, z, w ) ) )
1039 mGetErrorResult = GL_INVALID_OPERATION;
1043 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
1045 for( int i = 0; i < count; ++i )
1047 if( ! mProgramUniforms4f.SetUniformValue(
1050 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
1052 mGetErrorResult = GL_INVALID_OPERATION;
1058 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1062 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
1066 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1070 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1072 for( int i = 0; i < count; ++i )
1074 if( ! mProgramUniformsMat3.SetUniformValue(
1077 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
1079 mGetErrorResult = GL_INVALID_OPERATION;
1085 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1087 for( int i = 0; i < count; ++i )
1089 if( ! mProgramUniformsMat4.SetUniformValue(
1094 mGetErrorResult = GL_INVALID_OPERATION;
1100 inline void UseProgram(GLuint program)
1102 mCurrentProgram = program;
1105 inline void ValidateProgram(GLuint program)
1109 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1113 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1117 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1121 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1125 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1129 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1133 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1137 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1141 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1145 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1151 inline void ReadBuffer(GLenum mode)
1155 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1159 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1163 inline void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
1167 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1171 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1175 inline void CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
1179 inline void GenQueries(GLsizei n, GLuint* ids)
1183 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1187 inline GLboolean IsQuery(GLuint id)
1192 inline void BeginQuery(GLenum target, GLuint id)
1196 inline void EndQuery(GLenum target)
1200 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1204 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1208 inline GLboolean UnmapBuffer(GLenum target)
1213 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1217 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1221 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1225 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1229 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1233 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1237 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1241 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1245 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1249 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1253 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1257 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1262 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1266 inline void BindVertexArray(GLuint array)
1270 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1274 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1278 inline GLboolean IsVertexArray(GLuint array)
1283 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1287 inline void BeginTransformFeedback(GLenum primitiveMode)
1291 inline void EndTransformFeedback(void)
1295 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1299 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1303 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1307 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1311 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1315 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1319 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1323 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1327 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1331 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1335 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1339 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1343 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1348 inline void Uniform1ui(GLint location, GLuint v0)
1352 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1356 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1360 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1364 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1368 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1372 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1376 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1380 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1384 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1388 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1392 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1396 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1401 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1405 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1409 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1413 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1415 return GL_INVALID_INDEX;
1418 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1422 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1426 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1430 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1434 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1438 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1443 inline GLboolean IsSync(GLsync sync)
1448 inline void DeleteSync(GLsync sync)
1452 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1457 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1461 inline void GetInteger64v(GLenum pname, GLint64* params)
1465 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1469 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1473 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1477 inline void GenSamplers(GLsizei count, GLuint* samplers)
1481 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1485 inline GLboolean IsSampler(GLuint sampler)
1490 inline void BindSampler(GLuint unit, GLuint sampler)
1494 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1498 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1502 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1506 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1510 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1514 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1518 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1522 inline void BindTransformFeedback(GLenum target, GLuint id)
1526 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1530 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1534 inline GLboolean IsTransformFeedback(GLuint id)
1539 inline void PauseTransformFeedback(void)
1543 inline void ResumeTransformFeedback(void)
1547 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1549 mGetProgramBinaryCalled = true;
1552 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1556 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1560 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1564 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1568 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1572 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1576 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1580 public: // TEST FUNCTIONS
1581 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1582 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1583 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1584 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1585 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1586 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1587 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1588 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1589 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1590 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1591 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1592 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1593 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1594 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1595 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1596 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1598 inline bool GetVertexAttribArrayState(GLuint index)
1600 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1605 return mVertexAttribArrayState[ index ];
1607 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1608 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1610 //Methods for CullFace verification
1611 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1612 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1613 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1615 //Methods for Enable/Disable call verification
1616 inline void EnableEnableDisableCallTrace(bool enable) { mEnableDisableTrace.Enable(enable); }
1617 inline void ResetEnableDisableCallStack() { mEnableDisableTrace.Reset(); }
1618 inline TraceCallStack& GetEnableDisableTrace() { return mEnableDisableTrace; }
1620 //Methods for Shader verification
1621 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1622 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1623 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1625 //Methods for Texture verification
1626 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1627 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1628 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1630 //Methods for Texture verification
1631 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1632 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1633 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1635 //Methods for Draw verification
1636 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1637 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1638 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1640 //Methods for Depth function verification
1641 inline void EnableDepthFunctionCallTrace(bool enable) { mDepthFunctionTrace.Enable(enable); }
1642 inline void ResetDepthFunctionCallStack() { mDepthFunctionTrace.Reset(); }
1643 inline TraceCallStack& GetDepthFunctionTrace() { return mDepthFunctionTrace; }
1645 template <typename T>
1646 inline bool GetUniformValue( const char* name, T& value ) const
1648 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1649 program_it != mUniforms.end();
1652 const UniformIDMap &uniformIDs = program_it->second;
1654 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1655 if( uniform_it != uniformIDs.end() )
1657 // found one matching uniform name, lets check the value...
1658 GLuint programId = program_it->first;
1659 GLint uniformId = uniform_it->second;
1661 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1662 return mProgramUniforms.GetUniformValue( programId, uniformId, value );
1669 template <typename T>
1670 inline bool CheckUniformValue( const char* name, const T& value ) const
1672 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1673 program_it != mUniforms.end();
1676 const UniformIDMap &uniformIDs = program_it->second;
1678 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1679 if( uniform_it != uniformIDs.end() )
1681 // found one matching uniform name, lets check the value...
1682 GLuint programId = program_it->first;
1683 GLint uniformId = uniform_it->second;
1685 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1686 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
1688 // the value matches
1694 fprintf(stderr, "Not found, printing possible values:\n" );
1695 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1696 program_it != mUniforms.end();
1699 const UniformIDMap &uniformIDs = program_it->second;
1701 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1702 if( uniform_it != uniformIDs.end() )
1704 // found one matching uniform name, lets check the value...
1705 GLuint programId = program_it->first;
1706 GLint uniformId = uniform_it->second;
1708 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1710 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
1712 std::stringstream out;
1713 out << uniform_it->first << ": " << origValue;
1714 fprintf(stderr, "%s\n", out.str().c_str() );
1721 template <typename T>
1722 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
1724 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
1725 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
1728 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
1730 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1731 program_it != mUniforms.end();
1734 const UniformIDMap &uniformIDs = program_it->second;
1736 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1737 if( uniform_it != uniformIDs.end() )
1739 programId = program_it->first;
1740 uniformId = uniform_it->second;
1747 inline GLuint GetLastShaderCompiled() const
1749 return mLastShaderCompiled;
1752 inline GLuint GetLastProgramCreated() const
1754 return mLastProgramIdUsed;
1757 inline GLbitfield GetLastClearMask() const
1759 return mLastClearBitMask;
1764 ATTRIB_UNKNOWN = -1,
1769 ATTRIB_BONE_WEIGHTS,
1770 ATTRIB_BONE_INDICES,
1774 struct ScissorParams
1781 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
1784 // Methods to check scissor tests
1785 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
1787 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
1789 inline unsigned int GetClearCountCalled() const { return mClearCount; }
1791 typedef std::vector<size_t> BufferDataCalls;
1792 inline const BufferDataCalls& GetBufferDataCalls() const { return mBufferDataCalls; }
1793 inline void ResetBufferDataCalls() { mBufferDataCalls.clear(); }
1795 typedef std::vector<size_t> BufferSubDataCalls;
1796 inline const BufferSubDataCalls& GetBufferSubDataCalls() const { return mBufferSubDataCalls; }
1797 inline void ResetBufferSubDataCalls() { mBufferSubDataCalls.clear(); }
1800 GLuint mCurrentProgram;
1801 GLuint mCompileStatus;
1802 BufferDataCalls mBufferDataCalls;
1803 BufferSubDataCalls mBufferSubDataCalls;
1805 GLint mNumberOfActiveUniforms;
1806 GLint mGetAttribLocationResult;
1807 GLenum mGetErrorResult;
1808 GLubyte* mGetStringResult;
1809 GLboolean mIsBufferResult;
1810 GLboolean mIsEnabledResult;
1811 GLboolean mIsFramebufferResult;
1812 GLboolean mIsProgramResult;
1813 GLboolean mIsRenderbufferResult;
1814 GLboolean mIsShaderResult;
1815 GLboolean mIsTextureResult;
1816 GLenum mActiveTextureUnit;
1817 GLenum mCheckFramebufferStatusResult;
1818 GLint mFramebufferStatus;
1819 GLenum mFramebufferColorAttached;
1820 GLenum mFramebufferDepthAttached;
1821 GLenum mFramebufferStencilAttached;
1822 GLint mNumBinaryFormats;
1823 GLint mBinaryFormats;
1824 GLint mProgramBinaryLength;
1825 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
1826 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
1827 bool mGetProgramBinaryCalled;
1828 typedef std::map< GLuint, std::string> ShaderSourceMap;
1829 ShaderSourceMap mShaderSources;
1830 GLuint mLastShaderCompiled;
1831 GLbitfield mLastClearBitMask;
1832 unsigned int mClearCount;
1834 Vector4 mLastBlendColor;
1835 GLenum mLastBlendEquationRgb;
1836 GLenum mLastBlendEquationAlpha;
1837 GLenum mLastBlendFuncSrcRgb;
1838 GLenum mLastBlendFuncDstRgb;
1839 GLenum mLastBlendFuncSrcAlpha;
1840 GLenum mLastBlendFuncDstAlpha;
1842 // Data for manipulating the IDs returned by GenTextures
1843 GLuint mLastAutoTextureIdUsed;
1844 std::vector<GLuint> mNextTextureIds;
1845 std::vector<GLuint> mDeletedTextureIds;
1846 std::vector<GLuint> mBoundTextures;
1848 struct ActiveTextureType
1850 std::vector<GLuint> mBoundTextures;
1853 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
1855 TraceCallStack mCullFaceTrace;
1856 TraceCallStack mEnableDisableTrace;
1857 TraceCallStack mShaderTrace;
1858 TraceCallStack mTextureTrace;
1859 TraceCallStack mTexParamaterTrace;
1860 TraceCallStack mDrawTrace;
1861 TraceCallStack mDepthFunctionTrace;
1863 // Shaders & Uniforms
1864 GLuint mLastShaderIdUsed;
1865 GLuint mLastProgramIdUsed;
1866 GLuint mLastUniformIdUsed;
1867 typedef std::map< std::string, GLint > UniformIDMap;
1868 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
1869 ProgramUniformMap mUniforms;
1871 template <typename T>
1872 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
1875 typedef std::map< GLint, T > UniformValueMap;
1876 typedef std::map< GLuint, UniformValueMap > Map;
1878 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
1885 typename Map::iterator it = Map::find( program );
1886 if( it == Map::end() )
1888 // if its the first uniform for this program add it
1889 std::pair< typename Map::iterator, bool > result =
1890 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
1894 UniformValueMap& uniforms = it->second;
1895 uniforms[uniform] = value;
1900 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
1903 if ( GetUniformValue( program, uniform, uniformValue ) )
1905 return value == uniformValue;
1911 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
1918 typename Map::const_iterator it = Map::find( program );
1919 if( it == Map::end() )
1921 // Uniform values always initialised as 0
1926 const UniformValueMap& uniforms = it->second;
1927 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
1928 if( it2 == uniforms.end() )
1930 // Uniform values always initialised as 0
1934 value = it2->second;
1941 ProgramUniformValue<int> mProgramUniforms1i;
1942 ProgramUniformValue<float> mProgramUniforms1f;
1943 ProgramUniformValue<Vector2> mProgramUniforms2f;
1944 ProgramUniformValue<Vector3> mProgramUniforms3f;
1945 ProgramUniformValue<Vector4> mProgramUniforms4f;
1946 ProgramUniformValue<Matrix> mProgramUniformsMat4;
1947 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
1949 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
1951 return mProgramUniforms1i;
1953 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
1955 return mProgramUniforms1f;
1957 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
1959 return mProgramUniforms2f;
1961 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
1963 return mProgramUniforms3f;
1965 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
1967 return mProgramUniforms4f;
1969 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
1971 return mProgramUniformsMat4;
1973 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
1975 return mProgramUniformsMat3;
1977 inline void SetVertexAttribArray(GLuint index, bool state)
1979 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1984 mVertexAttribArrayState[ index ] = state;
1985 mVertexAttribArrayChanged = true;
1988 ScissorParams mScissorParams;
1992 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
1998 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
2004 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
2006 return Vector2::ZERO;
2010 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
2012 return Vector3::ZERO;
2016 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
2018 return Vector4::ZERO;
2022 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
2028 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
2030 return Matrix3( Matrix() );
2035 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2036 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2041 #endif // __TEST_GL_ES_H__