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)
394 inline void DepthMask(GLboolean flag)
398 inline void DepthRangef(GLclampf zNear, GLclampf zFar)
402 inline void DetachShader(GLuint program, GLuint shader)
404 std::stringstream out;
405 out << program << ", " << shader;
406 mShaderTrace.PushCall("DetachShader", out.str());
409 inline void Disable(GLenum cap)
411 std::stringstream out;
413 mEnableDisableTrace.PushCall("Disable", out.str());
416 inline void DisableVertexAttribArray(GLuint index)
418 SetVertexAttribArray( index, false );
421 inline void DrawArrays(GLenum mode, GLint first, GLsizei count)
423 std::stringstream out;
424 out << mode << ", " << first << ", " << count;
425 mDrawTrace.PushCall("DrawArrays", out.str());
428 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
430 std::stringstream out;
431 out << mode << ", " << count << ", " << type << ", indices";
432 mDrawTrace.PushCall("DrawElements", out.str());
435 inline void Enable(GLenum cap)
437 std::stringstream out;
439 mEnableDisableTrace.PushCall("Enable", out.str());
442 inline void EnableVertexAttribArray(GLuint index)
444 SetVertexAttribArray( index, true);
447 inline void Finish(void)
451 inline void Flush(void)
455 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
457 if (attachment == GL_DEPTH_ATTACHMENT)
459 mFramebufferDepthAttached = true;
461 else if (attachment == GL_STENCIL_ATTACHMENT)
463 mFramebufferStencilAttached = true;
467 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
470 mFramebufferStatus |= 4;
472 //We check 4 attachment colors
473 if ((attachment == GL_COLOR_ATTACHMENT0) || (attachment == GL_COLOR_ATTACHMENT1) || (attachment == GL_COLOR_ATTACHMENT2) || (attachment == GL_COLOR_ATTACHMENT4))
475 mFramebufferColorAttached = true;
479 inline void FrontFace(GLenum mode)
483 inline void GenBuffers(GLsizei n, GLuint* buffers)
485 // avoids an assert in GpuBuffers
489 inline void GenerateMipmap(GLenum target)
493 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers)
495 for( int i = 0; i < n; i++ )
497 framebuffers[i] = i + 1;
500 //Add 001 bit, this function needs to be called the first one in the chain
501 mFramebufferStatus = 1;
504 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
506 for( int i = 0; i < n; i++ )
508 renderbuffers[i] = i + 1;
513 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
514 * @param[in] ids A vector containing the next IDs to be generated
516 inline void SetNextTextureIds( const std::vector<GLuint>& ids )
518 mNextTextureIds = ids;
521 inline const std::vector<GLuint>& GetNextTextureIds()
523 return mNextTextureIds;
526 inline void GenTextures(GLsizei n, GLuint* textures)
528 for( int i=0; i<n; ++i )
530 if( !mNextTextureIds.empty() )
532 *(textures+i) = mNextTextureIds[0];
533 mNextTextureIds.erase( mNextTextureIds.begin() );
537 *(textures+i) = ++mLastAutoTextureIdUsed;
541 std::stringstream out;
542 for(int i=0; i<n; i++)
550 mTextureTrace.PushCall("GenTextures", out.str());
553 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
557 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
561 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
565 inline int GetAttribLocation(GLuint program, const char* name)
567 std::string attribName(name);
569 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
571 if( mStdAttribs[i] == attribName )
577 // 0 is a valid location
581 inline void GetBooleanv(GLenum pname, GLboolean* params)
585 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
589 inline GLenum GetError(void)
591 return mGetErrorResult;
594 inline void GetFloatv(GLenum pname, GLfloat* params)
598 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
602 inline void GetIntegerv(GLenum pname, GLint* params)
606 case GL_MAX_TEXTURE_SIZE:
609 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
612 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
613 *params = mNumBinaryFormats;
615 case GL_PROGRAM_BINARY_FORMATS_OES:
616 *params = mBinaryFormats;
621 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
625 *params = mLinkStatus;
627 case GL_PROGRAM_BINARY_LENGTH_OES:
628 *params = mProgramBinaryLength;
633 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
638 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
642 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
645 case GL_COMPILE_STATUS:
646 *params = mCompileStatus;
651 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
655 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
659 inline const GLubyte* GetString(GLenum name)
661 return mGetStringResult;
664 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
668 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
672 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
676 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
680 inline GLint GetUniformLocation(GLuint program, const char* name)
682 ProgramUniformMap::iterator it = mUniforms.find(program);
683 if( it == mUniforms.end() )
685 // Not a valid program ID
686 mGetErrorResult = GL_INVALID_OPERATION;
690 UniformIDMap& uniformIDs = it->second;
691 UniformIDMap::iterator it2 = uniformIDs.find( name );
692 if( it2 == uniformIDs.end() )
694 // Uniform not found, so add it...
695 uniformIDs[name] = ++mLastUniformIdUsed;
696 return mLastUniformIdUsed;
702 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
706 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
710 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
714 inline void Hint(GLenum target, GLenum mode)
718 inline GLboolean IsBuffer(GLuint buffer)
720 return mIsBufferResult;
723 inline GLboolean IsEnabled(GLenum cap)
725 return mIsEnabledResult;
728 inline GLboolean IsFramebuffer(GLuint framebuffer)
730 return mIsFramebufferResult;
733 inline GLboolean IsProgram(GLuint program)
735 return mIsProgramResult;
738 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
740 return mIsRenderbufferResult;
743 inline GLboolean IsShader(GLuint shader)
745 return mIsShaderResult;
748 inline GLboolean IsTexture(GLuint texture)
750 return mIsTextureResult;
753 inline void LineWidth(GLfloat width)
757 inline void LinkProgram(GLuint program)
759 std::stringstream out;
761 mShaderTrace.PushCall("LinkProgram", out.str());
764 inline void PixelStorei(GLenum pname, GLint param)
768 inline void PolygonOffset(GLfloat factor, GLfloat units)
772 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
776 inline void ReleaseShaderCompiler(void)
780 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
784 inline void SampleCoverage(GLclampf value, GLboolean invert)
788 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
790 mScissorParams.x = x;
791 mScissorParams.y = y;
792 mScissorParams.width = width;
793 mScissorParams.height = height;
796 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
800 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
802 std::string stringBuilder;
803 for(int i = 0; i < count; ++i)
805 stringBuilder += string[i];
807 mShaderSources[shader] = stringBuilder;
808 mLastShaderCompiled = shader;
811 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
813 const std::string shaderSource = mShaderSources[shader];
814 if( static_cast<int>(shaderSource.length()) < bufsize )
816 strcpy(source, shaderSource.c_str());
817 *length = shaderSource.length();
821 *length = bufsize -1;
822 strncpy(source, shaderSource.c_str(), *length);
823 source[*length] = 0x0;
827 inline std::string GetShaderSource(GLuint shader)
829 return mShaderSources[shader];
832 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
836 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
840 inline void StencilMask(GLuint mask)
844 inline void StencilMaskSeparate(GLenum face, GLuint mask)
848 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
852 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
856 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
858 std::stringstream out;
859 out << width << ", " << height;
860 mTextureTrace.PushCall("TexImage2D", out.str());
863 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
865 std::stringstream out;
866 out << target << ", " << pname << ", " << param;
867 mTexParamaterTrace.PushCall("TexParameterf", out.str());
870 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
872 std::stringstream out;
873 out << target << ", " << pname << ", " << params[0];
874 mTexParamaterTrace.PushCall("TexParameterfv", out.str());
877 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
879 std::stringstream out;
880 out << target << ", " << pname << ", " << param;
881 mTexParamaterTrace.PushCall("TexParameteri", out.str());
884 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
886 std::stringstream out;
887 out << target << ", " << pname << ", " << params[0];
888 mTexParamaterTrace.PushCall("TexParameteriv", out.str());
891 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
893 std::stringstream out;
894 out << xoffset << ", " << yoffset << ", " << width << ", " << height;
895 mTextureTrace.PushCall("TexSubImage2D", out.str());
898 inline void Uniform1f(GLint location, GLfloat x)
900 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, x ) )
902 mGetErrorResult = GL_INVALID_OPERATION;
906 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
908 for( int i = 0; i < count; ++i )
910 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
912 mGetErrorResult = GL_INVALID_OPERATION;
918 inline void Uniform1i(GLint location, GLint x)
920 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
922 mGetErrorResult = GL_INVALID_OPERATION;
926 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
928 for( int i = 0; i < count; ++i )
930 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
934 mGetErrorResult = GL_INVALID_OPERATION;
940 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
942 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
946 mGetErrorResult = GL_INVALID_OPERATION;
950 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
952 for( int i = 0; i < count; ++i )
954 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
956 Vector2( v[2*i], v[2*i+1] ) ) )
958 mGetErrorResult = GL_INVALID_OPERATION;
964 inline void Uniform2i(GLint location, GLint x, GLint y)
968 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
972 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
974 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
976 Vector3( x, y, z ) ) )
978 mGetErrorResult = GL_INVALID_OPERATION;
982 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
984 for( int i = 0; i < count; ++i )
986 if( ! mProgramUniforms3f.SetUniformValue(
989 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
991 mGetErrorResult = GL_INVALID_OPERATION;
997 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
1001 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
1005 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1007 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
1009 Vector4( x, y, z, w ) ) )
1011 mGetErrorResult = GL_INVALID_OPERATION;
1015 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
1017 for( int i = 0; i < count; ++i )
1019 if( ! mProgramUniforms4f.SetUniformValue(
1022 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
1024 mGetErrorResult = GL_INVALID_OPERATION;
1030 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1034 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
1038 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1042 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1044 for( int i = 0; i < count; ++i )
1046 if( ! mProgramUniformsMat3.SetUniformValue(
1049 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
1051 mGetErrorResult = GL_INVALID_OPERATION;
1057 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1059 for( int i = 0; i < count; ++i )
1061 if( ! mProgramUniformsMat4.SetUniformValue(
1066 mGetErrorResult = GL_INVALID_OPERATION;
1072 inline void UseProgram(GLuint program)
1074 mCurrentProgram = program;
1077 inline void ValidateProgram(GLuint program)
1081 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1085 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1089 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1093 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1097 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1101 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1105 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1109 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1113 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1117 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1123 inline void ReadBuffer(GLenum mode)
1127 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1131 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1135 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)
1139 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1143 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1147 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)
1151 inline void GenQueries(GLsizei n, GLuint* ids)
1155 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1159 inline GLboolean IsQuery(GLuint id)
1164 inline void BeginQuery(GLenum target, GLuint id)
1168 inline void EndQuery(GLenum target)
1172 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1176 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1180 inline GLboolean UnmapBuffer(GLenum target)
1185 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1189 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1193 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1197 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1201 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1205 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1209 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1213 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1217 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1221 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1225 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1229 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1234 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1238 inline void BindVertexArray(GLuint array)
1242 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1246 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1250 inline GLboolean IsVertexArray(GLuint array)
1255 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1259 inline void BeginTransformFeedback(GLenum primitiveMode)
1263 inline void EndTransformFeedback(void)
1267 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1271 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1275 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1279 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1283 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1287 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1291 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1295 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1299 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1303 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1307 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1311 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1315 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1320 inline void Uniform1ui(GLint location, GLuint v0)
1324 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1328 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1332 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1336 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1340 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1344 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1348 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1352 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1356 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1360 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1364 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1368 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1373 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1377 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1381 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1385 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1387 return GL_INVALID_INDEX;
1390 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1394 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1398 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1402 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1406 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1410 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1415 inline GLboolean IsSync(GLsync sync)
1420 inline void DeleteSync(GLsync sync)
1424 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1429 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1433 inline void GetInteger64v(GLenum pname, GLint64* params)
1437 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1441 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1445 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1449 inline void GenSamplers(GLsizei count, GLuint* samplers)
1453 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1457 inline GLboolean IsSampler(GLuint sampler)
1462 inline void BindSampler(GLuint unit, GLuint sampler)
1466 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1470 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1474 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1478 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1482 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1486 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1490 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1494 inline void BindTransformFeedback(GLenum target, GLuint id)
1498 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1502 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1506 inline GLboolean IsTransformFeedback(GLuint id)
1511 inline void PauseTransformFeedback(void)
1515 inline void ResumeTransformFeedback(void)
1519 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1521 mGetProgramBinaryCalled = true;
1524 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1528 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1532 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1536 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1540 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1544 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1548 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1552 public: // TEST FUNCTIONS
1553 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1554 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1555 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1556 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1557 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1558 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1559 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1560 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1561 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1562 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1563 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1564 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1565 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1566 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1567 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1568 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1570 inline bool GetVertexAttribArrayState(GLuint index)
1572 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1577 return mVertexAttribArrayState[ index ];
1579 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1580 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1582 //Methods for CullFace verification
1583 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1584 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1585 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1587 //Methods for Enable/Disable call verification
1588 inline void EnableEnableDisableCallTrace(bool enable) { mEnableDisableTrace.Enable(enable); }
1589 inline void ResetEnableDisableCallStack() { mEnableDisableTrace.Reset(); }
1590 inline TraceCallStack& GetEnableDisableTrace() { return mEnableDisableTrace; }
1592 //Methods for Shader verification
1593 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1594 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1595 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1597 //Methods for Texture verification
1598 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1599 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1600 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1602 //Methods for Texture verification
1603 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1604 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1605 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1607 //Methods for Draw verification
1608 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1609 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1610 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1612 template <typename T>
1613 inline bool GetUniformValue( const char* name, T& value ) const
1615 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1616 program_it != mUniforms.end();
1619 const UniformIDMap &uniformIDs = program_it->second;
1621 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1622 if( uniform_it != uniformIDs.end() )
1624 // found one matching uniform name, lets check the value...
1625 GLuint programId = program_it->first;
1626 GLint uniformId = uniform_it->second;
1628 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1629 return mProgramUniforms.GetUniformValue( programId, uniformId, value );
1636 template <typename T>
1637 inline bool CheckUniformValue( const char* name, const T& value ) const
1639 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1640 program_it != mUniforms.end();
1643 const UniformIDMap &uniformIDs = program_it->second;
1645 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1646 if( uniform_it != uniformIDs.end() )
1648 // found one matching uniform name, lets check the value...
1649 GLuint programId = program_it->first;
1650 GLint uniformId = uniform_it->second;
1652 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1653 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
1655 // the value matches
1661 fprintf(stderr, "Not found, printing possible values:\n" );
1662 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1663 program_it != mUniforms.end();
1666 const UniformIDMap &uniformIDs = program_it->second;
1668 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1669 if( uniform_it != uniformIDs.end() )
1671 // found one matching uniform name, lets check the value...
1672 GLuint programId = program_it->first;
1673 GLint uniformId = uniform_it->second;
1675 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1677 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
1679 std::stringstream out;
1680 out << uniform_it->first << ": " << origValue;
1681 fprintf(stderr, "%s\n", out.str().c_str() );
1688 template <typename T>
1689 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
1691 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
1692 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
1695 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
1697 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1698 program_it != mUniforms.end();
1701 const UniformIDMap &uniformIDs = program_it->second;
1703 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1704 if( uniform_it != uniformIDs.end() )
1706 programId = program_it->first;
1707 uniformId = uniform_it->second;
1714 inline GLuint GetLastShaderCompiled() const
1716 return mLastShaderCompiled;
1719 inline GLuint GetLastProgramCreated() const
1721 return mLastProgramIdUsed;
1724 inline GLbitfield GetLastClearMask() const
1726 return mLastClearBitMask;
1731 ATTRIB_UNKNOWN = -1,
1736 ATTRIB_BONE_WEIGHTS,
1737 ATTRIB_BONE_INDICES,
1741 struct ScissorParams
1748 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
1751 // Methods to check scissor tests
1752 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
1754 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
1756 inline unsigned int GetClearCountCalled() const { return mClearCount; }
1758 typedef std::vector<size_t> BufferDataCalls;
1759 inline const BufferDataCalls& GetBufferDataCalls() const { return mBufferDataCalls; }
1760 inline void ResetBufferDataCalls() { mBufferDataCalls.clear(); }
1762 typedef std::vector<size_t> BufferSubDataCalls;
1763 inline const BufferSubDataCalls& GetBufferSubDataCalls() const { return mBufferSubDataCalls; }
1764 inline void ResetBufferSubDataCalls() { mBufferSubDataCalls.clear(); }
1767 GLuint mCurrentProgram;
1768 GLuint mCompileStatus;
1769 BufferDataCalls mBufferDataCalls;
1770 BufferSubDataCalls mBufferSubDataCalls;
1772 GLint mGetAttribLocationResult;
1773 GLenum mGetErrorResult;
1774 GLubyte* mGetStringResult;
1775 GLboolean mIsBufferResult;
1776 GLboolean mIsEnabledResult;
1777 GLboolean mIsFramebufferResult;
1778 GLboolean mIsProgramResult;
1779 GLboolean mIsRenderbufferResult;
1780 GLboolean mIsShaderResult;
1781 GLboolean mIsTextureResult;
1782 GLenum mActiveTextureUnit;
1783 GLenum mCheckFramebufferStatusResult;
1784 GLint mFramebufferStatus;
1785 GLenum mFramebufferColorAttached;
1786 GLenum mFramebufferDepthAttached;
1787 GLenum mFramebufferStencilAttached;
1788 GLint mNumBinaryFormats;
1789 GLint mBinaryFormats;
1790 GLint mProgramBinaryLength;
1791 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
1792 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
1793 bool mGetProgramBinaryCalled;
1794 typedef std::map< GLuint, std::string> ShaderSourceMap;
1795 ShaderSourceMap mShaderSources;
1796 GLuint mLastShaderCompiled;
1797 GLbitfield mLastClearBitMask;
1798 unsigned int mClearCount;
1800 Vector4 mLastBlendColor;
1801 GLenum mLastBlendEquationRgb;
1802 GLenum mLastBlendEquationAlpha;
1803 GLenum mLastBlendFuncSrcRgb;
1804 GLenum mLastBlendFuncDstRgb;
1805 GLenum mLastBlendFuncSrcAlpha;
1806 GLenum mLastBlendFuncDstAlpha;
1808 // Data for manipulating the IDs returned by GenTextures
1809 GLuint mLastAutoTextureIdUsed;
1810 std::vector<GLuint> mNextTextureIds;
1811 std::vector<GLuint> mDeletedTextureIds;
1812 std::vector<GLuint> mBoundTextures;
1814 struct ActiveTextureType
1816 std::vector<GLuint> mBoundTextures;
1819 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
1821 TraceCallStack mCullFaceTrace;
1822 TraceCallStack mEnableDisableTrace;
1823 TraceCallStack mShaderTrace;
1824 TraceCallStack mTextureTrace;
1825 TraceCallStack mTexParamaterTrace;
1826 TraceCallStack mDrawTrace;
1828 // Shaders & Uniforms
1829 GLuint mLastShaderIdUsed;
1830 GLuint mLastProgramIdUsed;
1831 GLuint mLastUniformIdUsed;
1832 typedef std::map< std::string, GLint > UniformIDMap;
1833 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
1834 ProgramUniformMap mUniforms;
1836 template <typename T>
1837 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
1840 typedef std::map< GLint, T > UniformValueMap;
1841 typedef std::map< GLuint, UniformValueMap > Map;
1843 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
1850 typename Map::iterator it = Map::find( program );
1851 if( it == Map::end() )
1853 // if its the first uniform for this program add it
1854 std::pair< typename Map::iterator, bool > result =
1855 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
1859 UniformValueMap& uniforms = it->second;
1860 uniforms[uniform] = value;
1865 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
1868 if ( GetUniformValue( program, uniform, uniformValue ) )
1870 return value == uniformValue;
1876 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
1883 typename Map::const_iterator it = Map::find( program );
1884 if( it == Map::end() )
1886 // Uniform values always initialised as 0
1891 const UniformValueMap& uniforms = it->second;
1892 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
1893 if( it2 == uniforms.end() )
1895 // Uniform values always initialised as 0
1899 value = it2->second;
1906 ProgramUniformValue<int> mProgramUniforms1i;
1907 ProgramUniformValue<float> mProgramUniforms1f;
1908 ProgramUniformValue<Vector2> mProgramUniforms2f;
1909 ProgramUniformValue<Vector3> mProgramUniforms3f;
1910 ProgramUniformValue<Vector4> mProgramUniforms4f;
1911 ProgramUniformValue<Matrix> mProgramUniformsMat4;
1912 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
1914 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
1916 return mProgramUniforms1i;
1918 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
1920 return mProgramUniforms1f;
1922 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
1924 return mProgramUniforms2f;
1926 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
1928 return mProgramUniforms3f;
1930 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
1932 return mProgramUniforms4f;
1934 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
1936 return mProgramUniformsMat4;
1938 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
1940 return mProgramUniformsMat3;
1942 inline void SetVertexAttribArray(GLuint index, bool state)
1944 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1949 mVertexAttribArrayState[ index ] = state;
1950 mVertexAttribArrayChanged = true;
1953 ScissorParams mScissorParams;
1957 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
1963 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
1969 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
1971 return Vector2::ZERO;
1975 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
1977 return Vector3::ZERO;
1981 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
1983 return Vector4::ZERO;
1987 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
1993 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
1995 return Matrix3( Matrix() );
2000 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2001 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2006 #endif // __TEST_GL_ES_H__