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)
562 *length = snprintf(name, bufsize, "sTexture");
563 *type = GL_SAMPLER_2D;
567 *length = snprintf(name, bufsize, "sEffect");
568 *type = GL_SAMPLER_2D;
576 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
580 inline int GetAttribLocation(GLuint program, const char* name)
582 std::string attribName(name);
584 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
586 if( mStdAttribs[i] == attribName )
592 // 0 is a valid location
596 inline void GetBooleanv(GLenum pname, GLboolean* params)
600 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
604 inline GLenum GetError(void)
606 return mGetErrorResult;
609 inline void GetFloatv(GLenum pname, GLfloat* params)
613 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
617 inline void GetIntegerv(GLenum pname, GLint* params)
621 case GL_MAX_TEXTURE_SIZE:
624 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
627 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
628 *params = mNumBinaryFormats;
630 case GL_PROGRAM_BINARY_FORMATS_OES:
631 *params = mBinaryFormats;
636 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
641 *params = mLinkStatus;
643 case GL_PROGRAM_BINARY_LENGTH_OES:
644 *params = mProgramBinaryLength;
646 case GL_ACTIVE_UNIFORMS:
647 *params = mNumberOfActiveUniforms;
649 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
655 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
659 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
663 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
666 case GL_COMPILE_STATUS:
667 *params = mCompileStatus;
672 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
676 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
680 inline const GLubyte* GetString(GLenum name)
682 return mGetStringResult;
685 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
689 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
693 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
697 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
701 inline GLint GetUniformLocation(GLuint program, const char* name)
703 ProgramUniformMap::iterator it = mUniforms.find(program);
704 if( it == mUniforms.end() )
706 // Not a valid program ID
707 mGetErrorResult = GL_INVALID_OPERATION;
711 UniformIDMap& uniformIDs = it->second;
712 UniformIDMap::iterator it2 = uniformIDs.find( name );
713 if( it2 == uniformIDs.end() )
715 // Uniform not found, so add it...
716 uniformIDs[name] = ++mLastUniformIdUsed;
717 return mLastUniformIdUsed;
723 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
727 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
731 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
735 inline void Hint(GLenum target, GLenum mode)
739 inline GLboolean IsBuffer(GLuint buffer)
741 return mIsBufferResult;
744 inline GLboolean IsEnabled(GLenum cap)
746 return mIsEnabledResult;
749 inline GLboolean IsFramebuffer(GLuint framebuffer)
751 return mIsFramebufferResult;
754 inline GLboolean IsProgram(GLuint program)
756 return mIsProgramResult;
759 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
761 return mIsRenderbufferResult;
764 inline GLboolean IsShader(GLuint shader)
766 return mIsShaderResult;
769 inline GLboolean IsTexture(GLuint texture)
771 return mIsTextureResult;
774 inline void LineWidth(GLfloat width)
778 inline void LinkProgram(GLuint program)
780 std::stringstream out;
782 mShaderTrace.PushCall("LinkProgram", out.str());
784 mNumberOfActiveUniforms=2;
785 GetUniformLocation(program, "sTexture");
786 GetUniformLocation(program, "sEffect");
789 inline void PixelStorei(GLenum pname, GLint param)
793 inline void PolygonOffset(GLfloat factor, GLfloat units)
797 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
801 inline void ReleaseShaderCompiler(void)
805 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
809 inline void SampleCoverage(GLclampf value, GLboolean invert)
813 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
815 mScissorParams.x = x;
816 mScissorParams.y = y;
817 mScissorParams.width = width;
818 mScissorParams.height = height;
821 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
825 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
827 std::string stringBuilder;
828 for(int i = 0; i < count; ++i)
830 stringBuilder += string[i];
832 mShaderSources[shader] = stringBuilder;
833 mLastShaderCompiled = shader;
836 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
838 const std::string shaderSource = mShaderSources[shader];
839 if( static_cast<int>(shaderSource.length()) < bufsize )
841 strcpy(source, shaderSource.c_str());
842 *length = shaderSource.length();
846 *length = bufsize -1;
847 strncpy(source, shaderSource.c_str(), *length);
848 source[*length] = 0x0;
852 inline std::string GetShaderSource(GLuint shader)
854 return mShaderSources[shader];
857 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
861 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
865 inline void StencilMask(GLuint mask)
869 inline void StencilMaskSeparate(GLenum face, GLuint mask)
873 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
877 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
881 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
883 std::stringstream out;
884 out << width << ", " << height;
885 mTextureTrace.PushCall("TexImage2D", out.str());
888 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
890 std::stringstream out;
891 out << target << ", " << pname << ", " << param;
892 mTexParamaterTrace.PushCall("TexParameterf", out.str());
895 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
897 std::stringstream out;
898 out << target << ", " << pname << ", " << params[0];
899 mTexParamaterTrace.PushCall("TexParameterfv", out.str());
902 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
904 std::stringstream out;
905 out << target << ", " << pname << ", " << param;
906 mTexParamaterTrace.PushCall("TexParameteri", out.str());
909 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
911 std::stringstream out;
912 out << target << ", " << pname << ", " << params[0];
913 mTexParamaterTrace.PushCall("TexParameteriv", out.str());
916 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
918 std::stringstream out;
919 out << xoffset << ", " << yoffset << ", " << width << ", " << height;
920 mTextureTrace.PushCall("TexSubImage2D", out.str());
923 inline void Uniform1f(GLint location, GLfloat x)
925 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, x ) )
927 mGetErrorResult = GL_INVALID_OPERATION;
931 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
933 for( int i = 0; i < count; ++i )
935 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
937 mGetErrorResult = GL_INVALID_OPERATION;
943 inline void Uniform1i(GLint location, GLint x)
945 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
947 mGetErrorResult = GL_INVALID_OPERATION;
951 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
953 for( int i = 0; i < count; ++i )
955 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
959 mGetErrorResult = GL_INVALID_OPERATION;
965 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
967 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
971 mGetErrorResult = GL_INVALID_OPERATION;
975 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
977 for( int i = 0; i < count; ++i )
979 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
981 Vector2( v[2*i], v[2*i+1] ) ) )
983 mGetErrorResult = GL_INVALID_OPERATION;
989 inline void Uniform2i(GLint location, GLint x, GLint y)
993 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
997 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
999 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
1001 Vector3( x, y, z ) ) )
1003 mGetErrorResult = GL_INVALID_OPERATION;
1007 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
1009 for( int i = 0; i < count; ++i )
1011 if( ! mProgramUniforms3f.SetUniformValue(
1014 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
1016 mGetErrorResult = GL_INVALID_OPERATION;
1022 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
1026 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
1030 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1032 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
1034 Vector4( x, y, z, w ) ) )
1036 mGetErrorResult = GL_INVALID_OPERATION;
1040 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
1042 for( int i = 0; i < count; ++i )
1044 if( ! mProgramUniforms4f.SetUniformValue(
1047 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
1049 mGetErrorResult = GL_INVALID_OPERATION;
1055 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1059 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
1063 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1067 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1069 for( int i = 0; i < count; ++i )
1071 if( ! mProgramUniformsMat3.SetUniformValue(
1074 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
1076 mGetErrorResult = GL_INVALID_OPERATION;
1082 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1084 for( int i = 0; i < count; ++i )
1086 if( ! mProgramUniformsMat4.SetUniformValue(
1091 mGetErrorResult = GL_INVALID_OPERATION;
1097 inline void UseProgram(GLuint program)
1099 mCurrentProgram = program;
1102 inline void ValidateProgram(GLuint program)
1106 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1110 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1114 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1118 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1122 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1126 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1130 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1134 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1138 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1142 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1148 inline void ReadBuffer(GLenum mode)
1152 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1156 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1160 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)
1164 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1168 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1172 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)
1176 inline void GenQueries(GLsizei n, GLuint* ids)
1180 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1184 inline GLboolean IsQuery(GLuint id)
1189 inline void BeginQuery(GLenum target, GLuint id)
1193 inline void EndQuery(GLenum target)
1197 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1201 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1205 inline GLboolean UnmapBuffer(GLenum target)
1210 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1214 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1218 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1222 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1226 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1230 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1234 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1238 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1242 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1246 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1250 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1254 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1259 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1263 inline void BindVertexArray(GLuint array)
1267 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1271 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1275 inline GLboolean IsVertexArray(GLuint array)
1280 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1284 inline void BeginTransformFeedback(GLenum primitiveMode)
1288 inline void EndTransformFeedback(void)
1292 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1296 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1300 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1304 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1308 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1312 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1316 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1320 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1324 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1328 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1332 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1336 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1340 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1345 inline void Uniform1ui(GLint location, GLuint v0)
1349 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1353 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1357 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1361 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1365 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1369 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1373 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1377 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1381 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1385 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1389 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1393 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1398 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1402 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1406 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1410 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1412 return GL_INVALID_INDEX;
1415 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1419 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1423 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1427 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1431 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1435 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1440 inline GLboolean IsSync(GLsync sync)
1445 inline void DeleteSync(GLsync sync)
1449 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1454 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1458 inline void GetInteger64v(GLenum pname, GLint64* params)
1462 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1466 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1470 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1474 inline void GenSamplers(GLsizei count, GLuint* samplers)
1478 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1482 inline GLboolean IsSampler(GLuint sampler)
1487 inline void BindSampler(GLuint unit, GLuint sampler)
1491 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1495 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1499 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1503 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1507 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1511 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1515 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1519 inline void BindTransformFeedback(GLenum target, GLuint id)
1523 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1527 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1531 inline GLboolean IsTransformFeedback(GLuint id)
1536 inline void PauseTransformFeedback(void)
1540 inline void ResumeTransformFeedback(void)
1544 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1546 mGetProgramBinaryCalled = true;
1549 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1553 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1557 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1561 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1565 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1569 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1573 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1577 public: // TEST FUNCTIONS
1578 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1579 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1580 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1581 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1582 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1583 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1584 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1585 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1586 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1587 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1588 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1589 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1590 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1591 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1592 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1593 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1595 inline bool GetVertexAttribArrayState(GLuint index)
1597 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1602 return mVertexAttribArrayState[ index ];
1604 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1605 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1607 //Methods for CullFace verification
1608 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1609 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1610 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1612 //Methods for Enable/Disable call verification
1613 inline void EnableEnableDisableCallTrace(bool enable) { mEnableDisableTrace.Enable(enable); }
1614 inline void ResetEnableDisableCallStack() { mEnableDisableTrace.Reset(); }
1615 inline TraceCallStack& GetEnableDisableTrace() { return mEnableDisableTrace; }
1617 //Methods for Shader verification
1618 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1619 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1620 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1622 //Methods for Texture verification
1623 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1624 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1625 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1627 //Methods for Texture verification
1628 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1629 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1630 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1632 //Methods for Draw verification
1633 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1634 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1635 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1637 template <typename T>
1638 inline bool GetUniformValue( const char* name, T& value ) const
1640 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1641 program_it != mUniforms.end();
1644 const UniformIDMap &uniformIDs = program_it->second;
1646 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1647 if( uniform_it != uniformIDs.end() )
1649 // found one matching uniform name, lets check the value...
1650 GLuint programId = program_it->first;
1651 GLint uniformId = uniform_it->second;
1653 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1654 return mProgramUniforms.GetUniformValue( programId, uniformId, value );
1661 template <typename T>
1662 inline bool CheckUniformValue( const char* name, const T& value ) const
1664 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1665 program_it != mUniforms.end();
1668 const UniformIDMap &uniformIDs = program_it->second;
1670 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1671 if( uniform_it != uniformIDs.end() )
1673 // found one matching uniform name, lets check the value...
1674 GLuint programId = program_it->first;
1675 GLint uniformId = uniform_it->second;
1677 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1678 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
1680 // the value matches
1686 fprintf(stderr, "Not found, printing possible values:\n" );
1687 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1688 program_it != mUniforms.end();
1691 const UniformIDMap &uniformIDs = program_it->second;
1693 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1694 if( uniform_it != uniformIDs.end() )
1696 // found one matching uniform name, lets check the value...
1697 GLuint programId = program_it->first;
1698 GLint uniformId = uniform_it->second;
1700 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1702 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
1704 std::stringstream out;
1705 out << uniform_it->first << ": " << origValue;
1706 fprintf(stderr, "%s\n", out.str().c_str() );
1713 template <typename T>
1714 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
1716 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
1717 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
1720 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
1722 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1723 program_it != mUniforms.end();
1726 const UniformIDMap &uniformIDs = program_it->second;
1728 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1729 if( uniform_it != uniformIDs.end() )
1731 programId = program_it->first;
1732 uniformId = uniform_it->second;
1739 inline GLuint GetLastShaderCompiled() const
1741 return mLastShaderCompiled;
1744 inline GLuint GetLastProgramCreated() const
1746 return mLastProgramIdUsed;
1749 inline GLbitfield GetLastClearMask() const
1751 return mLastClearBitMask;
1756 ATTRIB_UNKNOWN = -1,
1761 ATTRIB_BONE_WEIGHTS,
1762 ATTRIB_BONE_INDICES,
1766 struct ScissorParams
1773 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
1776 // Methods to check scissor tests
1777 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
1779 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
1781 inline unsigned int GetClearCountCalled() const { return mClearCount; }
1783 typedef std::vector<size_t> BufferDataCalls;
1784 inline const BufferDataCalls& GetBufferDataCalls() const { return mBufferDataCalls; }
1785 inline void ResetBufferDataCalls() { mBufferDataCalls.clear(); }
1787 typedef std::vector<size_t> BufferSubDataCalls;
1788 inline const BufferSubDataCalls& GetBufferSubDataCalls() const { return mBufferSubDataCalls; }
1789 inline void ResetBufferSubDataCalls() { mBufferSubDataCalls.clear(); }
1792 GLuint mCurrentProgram;
1793 GLuint mCompileStatus;
1794 BufferDataCalls mBufferDataCalls;
1795 BufferSubDataCalls mBufferSubDataCalls;
1797 GLint mNumberOfActiveUniforms;
1798 GLint mGetAttribLocationResult;
1799 GLenum mGetErrorResult;
1800 GLubyte* mGetStringResult;
1801 GLboolean mIsBufferResult;
1802 GLboolean mIsEnabledResult;
1803 GLboolean mIsFramebufferResult;
1804 GLboolean mIsProgramResult;
1805 GLboolean mIsRenderbufferResult;
1806 GLboolean mIsShaderResult;
1807 GLboolean mIsTextureResult;
1808 GLenum mActiveTextureUnit;
1809 GLenum mCheckFramebufferStatusResult;
1810 GLint mFramebufferStatus;
1811 GLenum mFramebufferColorAttached;
1812 GLenum mFramebufferDepthAttached;
1813 GLenum mFramebufferStencilAttached;
1814 GLint mNumBinaryFormats;
1815 GLint mBinaryFormats;
1816 GLint mProgramBinaryLength;
1817 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
1818 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
1819 bool mGetProgramBinaryCalled;
1820 typedef std::map< GLuint, std::string> ShaderSourceMap;
1821 ShaderSourceMap mShaderSources;
1822 GLuint mLastShaderCompiled;
1823 GLbitfield mLastClearBitMask;
1824 unsigned int mClearCount;
1826 Vector4 mLastBlendColor;
1827 GLenum mLastBlendEquationRgb;
1828 GLenum mLastBlendEquationAlpha;
1829 GLenum mLastBlendFuncSrcRgb;
1830 GLenum mLastBlendFuncDstRgb;
1831 GLenum mLastBlendFuncSrcAlpha;
1832 GLenum mLastBlendFuncDstAlpha;
1834 // Data for manipulating the IDs returned by GenTextures
1835 GLuint mLastAutoTextureIdUsed;
1836 std::vector<GLuint> mNextTextureIds;
1837 std::vector<GLuint> mDeletedTextureIds;
1838 std::vector<GLuint> mBoundTextures;
1840 struct ActiveTextureType
1842 std::vector<GLuint> mBoundTextures;
1845 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
1847 TraceCallStack mCullFaceTrace;
1848 TraceCallStack mEnableDisableTrace;
1849 TraceCallStack mShaderTrace;
1850 TraceCallStack mTextureTrace;
1851 TraceCallStack mTexParamaterTrace;
1852 TraceCallStack mDrawTrace;
1854 // Shaders & Uniforms
1855 GLuint mLastShaderIdUsed;
1856 GLuint mLastProgramIdUsed;
1857 GLuint mLastUniformIdUsed;
1858 typedef std::map< std::string, GLint > UniformIDMap;
1859 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
1860 ProgramUniformMap mUniforms;
1862 template <typename T>
1863 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
1866 typedef std::map< GLint, T > UniformValueMap;
1867 typedef std::map< GLuint, UniformValueMap > Map;
1869 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
1876 typename Map::iterator it = Map::find( program );
1877 if( it == Map::end() )
1879 // if its the first uniform for this program add it
1880 std::pair< typename Map::iterator, bool > result =
1881 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
1885 UniformValueMap& uniforms = it->second;
1886 uniforms[uniform] = value;
1891 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
1894 if ( GetUniformValue( program, uniform, uniformValue ) )
1896 return value == uniformValue;
1902 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
1909 typename Map::const_iterator it = Map::find( program );
1910 if( it == Map::end() )
1912 // Uniform values always initialised as 0
1917 const UniformValueMap& uniforms = it->second;
1918 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
1919 if( it2 == uniforms.end() )
1921 // Uniform values always initialised as 0
1925 value = it2->second;
1932 ProgramUniformValue<int> mProgramUniforms1i;
1933 ProgramUniformValue<float> mProgramUniforms1f;
1934 ProgramUniformValue<Vector2> mProgramUniforms2f;
1935 ProgramUniformValue<Vector3> mProgramUniforms3f;
1936 ProgramUniformValue<Vector4> mProgramUniforms4f;
1937 ProgramUniformValue<Matrix> mProgramUniformsMat4;
1938 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
1940 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
1942 return mProgramUniforms1i;
1944 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
1946 return mProgramUniforms1f;
1948 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
1950 return mProgramUniforms2f;
1952 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
1954 return mProgramUniforms3f;
1956 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
1958 return mProgramUniforms4f;
1960 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
1962 return mProgramUniformsMat4;
1964 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
1966 return mProgramUniformsMat3;
1968 inline void SetVertexAttribArray(GLuint index, bool state)
1970 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1975 mVertexAttribArrayState[ index ] = state;
1976 mVertexAttribArrayChanged = true;
1979 ScissorParams mScissorParams;
1983 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
1989 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
1995 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
1997 return Vector2::ZERO;
2001 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
2003 return Vector3::ZERO;
2007 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
2009 return Vector4::ZERO;
2013 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
2019 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
2021 return Matrix3( Matrix() );
2026 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2027 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2032 #endif // __TEST_GL_ES_H__