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 <dali/public-api/dali-core.h>
28 #include <dali/integration-api/core.h>
29 #include <dali/integration-api/gl-abstraction.h>
30 #include <dali/integration-api/gl-defines.h>
31 #include "test-trace-call-stack.h"
36 static const unsigned int MAX_ATTRIBUTE_CACHE_SIZE = 64;
37 static const char *mStdAttribs[MAX_ATTRIBUTE_CACHE_SIZE] =
39 "aPosition", // ATTRIB_POSITION
40 "aNormal", // ATTRIB_NORMAL
41 "aTexCoord", // ATTRIB_TEXCOORD
42 "aColor", // ATTRIB_COLOR
43 "aBoneWeights", // ATTRIB_BONE_WEIGHTS
44 "aBoneIndices" // ATTRIB_BONE_INDICES
47 class DALI_IMPORT_API TestGlAbstraction: public Dali::Integration::GlAbstraction
55 void PostRender(unsigned int timeDelta);
59 inline void ActiveTexture( GLenum textureUnit )
61 mActiveTextureUnit = textureUnit - GL_TEXTURE0;
64 inline GLenum GetActiveTextureUnit() const
66 return mActiveTextureUnit + GL_TEXTURE0;
69 inline void AttachShader( GLuint program, GLuint shader )
71 std::stringstream out;
72 out << program << ", " << shader;
73 mShaderTrace.PushCall("AttachShader", out.str());
76 inline void BindAttribLocation( GLuint program, GLuint index, const char* name )
80 inline void BindBuffer( GLenum target, GLuint buffer )
84 inline void BindFramebuffer( GLenum target, GLuint framebuffer )
88 inline void BindRenderbuffer( GLenum target, GLuint renderbuffer )
93 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
94 * @return A vector containing the IDs that were bound.
96 inline const std::vector<GLuint>& GetBoundTextures() const
98 return mBoundTextures;
102 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
103 * @param[in] activeTextureUnit The specific active texture unit.
104 * @return A vector containing the IDs that were bound.
106 inline const std::vector<GLuint>& GetBoundTextures( GLuint activeTextureUnit ) const
108 return mActiveTextures[ activeTextureUnit - GL_TEXTURE0 ].mBoundTextures;
112 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
114 inline void ClearBoundTextures()
116 mBoundTextures.clear();
118 for( unsigned int i=0; i<MIN_TEXTURE_UNIT_LIMIT; ++i )
120 mActiveTextures[ i ].mBoundTextures.clear();
124 inline void BindTexture( GLenum target, GLuint texture )
126 // Record the bound textures for future checks
129 mBoundTextures.push_back( texture );
131 if( mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT )
133 mActiveTextures[ mActiveTextureUnit ].mBoundTextures.push_back( texture );
137 std::stringstream out;
138 out << target << ", " << texture;
139 mTextureTrace.PushCall("BindTexture", out.str());
142 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
144 mLastBlendColor.r = red;
145 mLastBlendColor.g = green;
146 mLastBlendColor.b = blue;
147 mLastBlendColor.a = alpha;
150 inline const Vector4& GetLastBlendColor() const
152 return mLastBlendColor;
155 inline void BlendEquation( GLenum mode )
157 mLastBlendEquationRgb = mode;
158 mLastBlendEquationAlpha = mode;
161 inline void BlendEquationSeparate( GLenum modeRgb, GLenum modeAlpha )
163 mLastBlendEquationRgb = modeRgb;
164 mLastBlendEquationAlpha = modeAlpha;
167 inline GLenum GetLastBlendEquationRgb() const
169 return mLastBlendEquationRgb;
172 inline GLenum GetLastBlendEquationAlpha() const
174 return mLastBlendEquationAlpha;
177 inline void BlendFunc(GLenum sfactor, GLenum dfactor)
179 mLastBlendFuncSrcRgb = sfactor;
180 mLastBlendFuncDstRgb = dfactor;
181 mLastBlendFuncSrcAlpha = sfactor;
182 mLastBlendFuncDstAlpha = dfactor;
185 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
187 mLastBlendFuncSrcRgb = srcRGB;
188 mLastBlendFuncDstRgb = dstRGB;
189 mLastBlendFuncSrcAlpha = srcAlpha;
190 mLastBlendFuncDstAlpha = dstAlpha;
193 inline GLenum GetLastBlendFuncSrcRgb() const
195 return mLastBlendFuncSrcRgb;
198 inline GLenum GetLastBlendFuncDstRgb() const
200 return mLastBlendFuncDstRgb;
203 inline GLenum GetLastBlendFuncSrcAlpha() const
205 return mLastBlendFuncSrcAlpha;
208 inline GLenum GetLastBlendFuncDstAlpha() const
210 return mLastBlendFuncDstAlpha;
213 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
217 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
221 inline GLenum CheckFramebufferStatus(GLenum target)
223 return mCheckFramebufferStatusResult;
226 inline void Clear(GLbitfield mask)
230 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
234 inline void ClearDepthf(GLclampf depth)
238 inline void ClearStencil(GLint s)
242 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
246 inline void CompileShader(GLuint shader)
248 std::stringstream out;
250 mShaderTrace.PushCall("CompileShader", out.str());
253 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
257 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
261 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
265 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
269 inline GLuint CreateProgram(void)
271 mShaderTrace.PushCall("CreateProgram", "");
273 ++mLastProgramIdUsed;
274 mUniforms[mLastProgramIdUsed] = UniformIDMap();
275 return mLastProgramIdUsed;
278 inline GLuint CreateShader(GLenum type)
280 std::stringstream out;
282 mShaderTrace.PushCall("CreateShader", out.str());
284 return ++mLastShaderIdUsed;
287 inline void CullFace(GLenum mode)
289 std::stringstream out;
291 mCullFaceTrace.PushCall("CullFace", out.str());
294 inline void DeleteBuffers(GLsizei n, const GLuint* buffers)
298 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
302 inline void DeleteProgram(GLuint program)
304 std::stringstream out;
306 mShaderTrace.PushCall("DeleteProgram", out.str());
309 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
313 inline void DeleteShader(GLuint shader)
315 std::stringstream out;
317 mShaderTrace.PushCall("DeleteShader", out.str());
320 inline void DeleteTextures(GLsizei n, const GLuint* textures)
322 std::stringstream out;
323 out << n << ", " << textures << " = [" ;
325 for(GLsizei i=0; i<n; i++)
327 out << textures[i] << ", " ;
328 mDeletedTextureIds.push_back(textures[i]);
331 mTextureTrace.PushCall("DeleteTextures", out.str());
334 inline bool CheckNoTexturesDeleted()
336 return mDeletedTextureIds.size() == 0;
339 inline bool CheckTextureDeleted( GLuint textureId )
343 for(std::vector<GLuint>::iterator iter=mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
345 if(*iter == textureId)
354 inline void ClearDeletedTextures()
356 mDeletedTextureIds.clear();
359 inline void DepthFunc(GLenum func)
363 inline void DepthMask(GLboolean flag)
367 inline void DepthRangef(GLclampf zNear, GLclampf zFar)
371 inline void DetachShader(GLuint program, GLuint shader)
373 std::stringstream out;
374 out << program << ", " << shader;
375 mShaderTrace.PushCall("DetachShader", out.str());
378 inline void Disable(GLenum cap)
380 std::stringstream out;
382 mCullFaceTrace.PushCall("Disable", out.str());
385 inline void DisableVertexAttribArray(GLuint index)
387 SetVertexAttribArray( index, false );
390 inline void DrawArrays(GLenum mode, GLint first, GLsizei count)
392 std::stringstream out;
393 out << mode << ", " << first << ", " << count;
394 mDrawTrace.PushCall("DrawArrays", out.str());
397 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
399 std::stringstream out;
400 out << mode << ", " << count << ", " << type << ", indices";
401 mDrawTrace.PushCall("DrawElements", out.str());
404 inline void Enable(GLenum cap)
406 std::stringstream out;
408 mCullFaceTrace.PushCall("Enable", out.str());
411 inline void EnableVertexAttribArray(GLuint index)
413 SetVertexAttribArray( index, true);
416 inline void Finish(void)
420 inline void Flush(void)
424 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
428 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
432 inline void FrontFace(GLenum mode)
436 inline void GenBuffers(GLsizei n, GLuint* buffers)
438 // avoids an assert in GpuBuffers
442 inline void GenerateMipmap(GLenum target)
446 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers)
450 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
455 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
456 * @param[in] ids A vector containing the next IDs to be generated
458 inline void SetNextTextureIds( const std::vector<GLuint>& ids )
460 mNextTextureIds = ids;
463 inline const std::vector<GLuint>& GetNextTextureIds()
465 return mNextTextureIds;
468 inline void GenTextures(GLsizei n, GLuint* textures)
470 for( int i=0; i<n; ++i )
472 if( !mNextTextureIds.empty() )
474 *(textures+i) = mNextTextureIds[0];
475 mNextTextureIds.erase( mNextTextureIds.begin() );
479 *(textures+i) = ++mLastAutoTextureIdUsed;
483 std::stringstream out;
484 for(int i=0; i<n; i++)
492 mTextureTrace.PushCall("GenTextures", out.str());
495 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
499 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
503 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
507 inline int GetAttribLocation(GLuint program, const char* name)
509 std::string attribName(name);
511 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
513 if( mStdAttribs[i] == attribName )
519 // 0 is a valid location
523 inline void GetBooleanv(GLenum pname, GLboolean* params)
527 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
531 inline GLenum GetError(void)
533 return mGetErrorResult;
536 inline void GetFloatv(GLenum pname, GLfloat* params)
540 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
544 inline void GetIntegerv(GLenum pname, GLint* params)
548 case GL_MAX_TEXTURE_SIZE:
551 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
554 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
555 *params = mNumBinaryFormats;
557 case GL_PROGRAM_BINARY_FORMATS_OES:
558 *params = mBinaryFormats;
563 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
567 *params = mLinkStatus;
569 case GL_PROGRAM_BINARY_LENGTH_OES:
570 *params = mProgramBinaryLength;
575 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
580 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
584 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
587 case GL_COMPILE_STATUS:
588 *params = mCompileStatus;
593 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
597 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
601 inline const GLubyte* GetString(GLenum name)
603 return mGetStringResult;
606 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
610 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
614 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
618 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
622 inline GLint GetUniformLocation(GLuint program, const char* name)
624 ProgramUniformMap::iterator it = mUniforms.find(program);
625 if( it == mUniforms.end() )
627 // Not a valid program ID
628 mGetErrorResult = GL_INVALID_OPERATION;
632 UniformIDMap& uniformIDs = it->second;
633 UniformIDMap::iterator it2 = uniformIDs.find( name );
634 if( it2 == uniformIDs.end() )
636 // Uniform not found, so add it...
637 uniformIDs[name] = ++mLastUniformIdUsed;
638 return mLastUniformIdUsed;
644 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
648 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
652 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
656 inline void Hint(GLenum target, GLenum mode)
660 inline GLboolean IsBuffer(GLuint buffer)
662 return mIsBufferResult;
665 inline GLboolean IsEnabled(GLenum cap)
667 return mIsEnabledResult;
670 inline GLboolean IsFramebuffer(GLuint framebuffer)
672 return mIsFramebufferResult;
675 inline GLboolean IsProgram(GLuint program)
677 return mIsProgramResult;
680 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
682 return mIsRenderbufferResult;
685 inline GLboolean IsShader(GLuint shader)
687 return mIsShaderResult;
690 inline GLboolean IsTexture(GLuint texture)
692 return mIsTextureResult;
695 inline void LineWidth(GLfloat width)
699 inline void LinkProgram(GLuint program)
701 std::stringstream out;
703 mShaderTrace.PushCall("LinkProgram", out.str());
706 inline void PixelStorei(GLenum pname, GLint param)
710 inline void PolygonOffset(GLfloat factor, GLfloat units)
714 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
718 inline void ReleaseShaderCompiler(void)
722 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
726 inline void SampleCoverage(GLclampf value, GLboolean invert)
730 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
732 mScissorParams.x = x;
733 mScissorParams.y = y;
734 mScissorParams.width = width;
735 mScissorParams.height = height;
738 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
742 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
744 std::string stringBuilder;
745 for(int i = 0; i < count; ++i)
747 stringBuilder += string[i];
749 mShaderSources[shader] = stringBuilder;
750 mLastShaderCompiled = shader;
753 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
755 const std::string shaderSource = mShaderSources[shader];
756 if( static_cast<int>(shaderSource.length()) < bufsize )
758 strcpy(source, shaderSource.c_str());
759 *length = shaderSource.length();
763 *length = bufsize -1;
764 strncpy(source, shaderSource.c_str(), *length);
765 source[*length] = 0x0;
769 inline std::string GetShaderSource(GLuint shader)
771 return mShaderSources[shader];
774 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
778 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
782 inline void StencilMask(GLuint mask)
786 inline void StencilMaskSeparate(GLenum face, GLuint mask)
790 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
794 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
798 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
800 std::stringstream out;
801 out << width << ", " << height;
802 mTextureTrace.PushCall("TexImage2D", out.str());
805 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
807 std::stringstream out;
808 out << target << ", " << pname << ", " << param;
809 mTexParamaterTrace.PushCall("TexParameterf", out.str());
812 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
814 std::stringstream out;
815 out << target << ", " << pname << ", " << params[0];
816 mTexParamaterTrace.PushCall("TexParameterfv", out.str());
819 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
821 std::stringstream out;
822 out << target << ", " << pname << ", " << param;
823 mTexParamaterTrace.PushCall("TexParameteri", out.str());
826 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
828 std::stringstream out;
829 out << target << ", " << pname << ", " << params[0];
830 mTexParamaterTrace.PushCall("TexParameteriv", out.str());
833 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
835 std::stringstream out;
836 out << xoffset << ", " << yoffset << ", " << width << ", " << height;
837 mTextureTrace.PushCall("TexSubImage2D", out.str());
840 inline void Uniform1f(GLint location, GLfloat x)
842 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, x ) )
844 mGetErrorResult = GL_INVALID_OPERATION;
848 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
850 for( int i = 0; i < count; ++i )
852 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
854 mGetErrorResult = GL_INVALID_OPERATION;
860 inline void Uniform1i(GLint location, GLint x)
862 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
864 mGetErrorResult = GL_INVALID_OPERATION;
868 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
870 for( int i = 0; i < count; ++i )
872 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
876 mGetErrorResult = GL_INVALID_OPERATION;
882 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
884 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
888 mGetErrorResult = GL_INVALID_OPERATION;
892 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
894 for( int i = 0; i < count; ++i )
896 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
898 Vector2( v[2*i], v[2*i+1] ) ) )
900 mGetErrorResult = GL_INVALID_OPERATION;
906 inline void Uniform2i(GLint location, GLint x, GLint y)
910 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
914 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
916 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
918 Vector3( x, y, z ) ) )
920 mGetErrorResult = GL_INVALID_OPERATION;
924 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
926 for( int i = 0; i < count; ++i )
928 if( ! mProgramUniforms3f.SetUniformValue(
931 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
933 mGetErrorResult = GL_INVALID_OPERATION;
939 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
943 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
947 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
949 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
951 Vector4( x, y, z, w ) ) )
953 mGetErrorResult = GL_INVALID_OPERATION;
957 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
959 for( int i = 0; i < count; ++i )
961 if( ! mProgramUniforms4f.SetUniformValue(
964 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
966 mGetErrorResult = GL_INVALID_OPERATION;
972 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
976 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
980 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
984 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
986 for( int i = 0; i < count; ++i )
988 if( ! mProgramUniformsMat3.SetUniformValue(
991 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
993 mGetErrorResult = GL_INVALID_OPERATION;
999 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1001 for( int i = 0; i < count; ++i )
1003 if( ! mProgramUniformsMat4.SetUniformValue(
1008 mGetErrorResult = GL_INVALID_OPERATION;
1014 inline void UseProgram(GLuint program)
1016 mCurrentProgram = program;
1019 inline void ValidateProgram(GLuint program)
1023 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1027 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1031 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1035 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1039 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1043 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1047 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1051 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1055 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1059 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1065 inline void ReadBuffer(GLenum mode)
1069 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1073 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1077 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)
1081 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1085 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1089 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)
1093 inline void GenQueries(GLsizei n, GLuint* ids)
1097 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1101 inline GLboolean IsQuery(GLuint id)
1106 inline void BeginQuery(GLenum target, GLuint id)
1110 inline void EndQuery(GLenum target)
1114 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1118 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1122 inline GLboolean UnmapBuffer(GLenum target)
1127 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1131 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1135 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1139 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1143 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1147 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1151 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1155 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1159 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1163 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1167 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1171 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1176 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1180 inline void BindVertexArray(GLuint array)
1184 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1188 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1192 inline GLboolean IsVertexArray(GLuint array)
1197 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1201 inline void BeginTransformFeedback(GLenum primitiveMode)
1205 inline void EndTransformFeedback(void)
1209 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1213 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1217 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1221 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1225 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1229 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1233 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1237 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1241 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1245 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1249 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1253 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1257 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1262 inline void Uniform1ui(GLint location, GLuint v0)
1266 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1270 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1274 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1278 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1282 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1286 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1290 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1294 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1298 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1302 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1306 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1310 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1315 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1319 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1323 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1327 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1329 return GL_INVALID_INDEX;
1332 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1336 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1340 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1344 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1348 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1352 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1357 inline GLboolean IsSync(GLsync sync)
1362 inline void DeleteSync(GLsync sync)
1366 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1371 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1375 inline void GetInteger64v(GLenum pname, GLint64* params)
1379 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1383 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1387 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1391 inline void GenSamplers(GLsizei count, GLuint* samplers)
1395 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1399 inline GLboolean IsSampler(GLuint sampler)
1404 inline void BindSampler(GLuint unit, GLuint sampler)
1408 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1412 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1416 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1420 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1424 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1428 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1432 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1436 inline void BindTransformFeedback(GLenum target, GLuint id)
1440 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1444 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1448 inline GLboolean IsTransformFeedback(GLuint id)
1453 inline void PauseTransformFeedback(void)
1457 inline void ResumeTransformFeedback(void)
1461 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1463 mGetProgramBinaryCalled = true;
1466 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1470 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1474 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1478 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1482 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1486 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1490 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1494 public: // TEST FUNCTIONS
1495 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1496 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1497 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1498 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1499 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1500 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1501 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1502 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1503 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1504 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1505 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1506 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1507 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1508 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1509 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1510 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1512 inline bool GetVertexAttribArrayState(GLuint index)
1514 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1519 return mVertexAttribArrayState[ index ];
1521 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1522 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1524 //Methods for CullFace verification
1525 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1526 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1527 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1529 //Methods for Shader verification
1530 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1531 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1532 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1534 //Methods for Texture verification
1535 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1536 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1537 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1539 //Methods for Texture verification
1540 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1541 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1542 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1544 //Methods for Draw verification
1545 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1546 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1547 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1549 template <typename T>
1550 inline bool CheckUniformValue( const char* name, const T& value ) const
1552 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1553 program_it != mUniforms.end();
1556 const UniformIDMap &uniformIDs = program_it->second;
1558 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1559 if( uniform_it != uniformIDs.end() )
1561 // found one matching uniform name, lets check the value...
1562 GLuint programId = program_it->first;
1563 GLint uniformId = uniform_it->second;
1565 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1566 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
1568 // the value matches
1574 fprintf(stderr, "Not found, printing possible values:" );
1575 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1576 program_it != mUniforms.end();
1579 const UniformIDMap &uniformIDs = program_it->second;
1581 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1582 if( uniform_it != uniformIDs.end() )
1584 // found one matching uniform name, lets check the value...
1585 GLuint programId = program_it->first;
1586 GLint uniformId = uniform_it->second;
1588 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1590 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
1592 std::stringstream out;
1593 out << uniform_it->first << ": " << origValue;
1594 fprintf(stderr, "%s", out.str().c_str() );
1601 template <typename T>
1602 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
1604 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
1605 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
1608 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
1610 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1611 program_it != mUniforms.end();
1614 const UniformIDMap &uniformIDs = program_it->second;
1616 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1617 if( uniform_it != uniformIDs.end() )
1619 programId = program_it->first;
1620 uniformId = uniform_it->second;
1627 inline GLuint GetLastShaderCompiled() const
1629 return mLastShaderCompiled;
1632 inline GLuint GetLastProgramCreated() const
1634 return mLastProgramIdUsed;
1639 ATTRIB_UNKNOWN = -1,
1644 ATTRIB_BONE_WEIGHTS,
1645 ATTRIB_BONE_INDICES,
1649 struct ScissorParams
1656 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
1659 // Methods to check scissor tests
1660 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
1662 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
1665 GLuint mCurrentProgram;
1666 GLuint mCompileStatus;
1668 GLint mGetAttribLocationResult;
1669 GLenum mGetErrorResult;
1670 GLubyte* mGetStringResult;
1671 GLboolean mIsBufferResult;
1672 GLboolean mIsEnabledResult;
1673 GLboolean mIsFramebufferResult;
1674 GLboolean mIsProgramResult;
1675 GLboolean mIsRenderbufferResult;
1676 GLboolean mIsShaderResult;
1677 GLboolean mIsTextureResult;
1678 GLenum mActiveTextureUnit;
1679 GLenum mCheckFramebufferStatusResult;
1680 GLint mNumBinaryFormats;
1681 GLint mBinaryFormats;
1682 GLint mProgramBinaryLength;
1683 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
1684 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
1685 bool mGetProgramBinaryCalled;
1686 typedef std::map< GLuint, std::string> ShaderSourceMap;
1687 ShaderSourceMap mShaderSources;
1688 GLuint mLastShaderCompiled;
1690 Vector4 mLastBlendColor;
1691 GLenum mLastBlendEquationRgb;
1692 GLenum mLastBlendEquationAlpha;
1693 GLenum mLastBlendFuncSrcRgb;
1694 GLenum mLastBlendFuncDstRgb;
1695 GLenum mLastBlendFuncSrcAlpha;
1696 GLenum mLastBlendFuncDstAlpha;
1698 // Data for manipulating the IDs returned by GenTextures
1699 GLuint mLastAutoTextureIdUsed;
1700 std::vector<GLuint> mNextTextureIds;
1701 std::vector<GLuint> mDeletedTextureIds;
1702 std::vector<GLuint> mBoundTextures;
1704 struct ActiveTextureType
1706 std::vector<GLuint> mBoundTextures;
1709 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
1711 TraceCallStack mCullFaceTrace;
1712 TraceCallStack mShaderTrace;
1713 TraceCallStack mTextureTrace;
1714 TraceCallStack mTexParamaterTrace;
1715 TraceCallStack mDrawTrace;
1717 // Shaders & Uniforms
1718 GLuint mLastShaderIdUsed;
1719 GLuint mLastProgramIdUsed;
1720 GLuint mLastUniformIdUsed;
1721 typedef std::map< std::string, GLint > UniformIDMap;
1722 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
1723 ProgramUniformMap mUniforms;
1725 template <typename T>
1726 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
1729 typedef std::map< GLint, T > UniformValueMap;
1730 typedef std::map< GLuint, UniformValueMap > Map;
1732 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
1739 typename Map::iterator it = Map::find( program );
1740 if( it == Map::end() )
1742 // if its the first uniform for this program add it
1743 std::pair< typename Map::iterator, bool > result =
1744 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
1748 UniformValueMap& uniforms = it->second;
1749 uniforms[uniform] = value;
1754 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
1757 if ( GetUniformValue( program, uniform, uniformValue ) )
1759 return value == uniformValue;
1765 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
1772 typename Map::const_iterator it = Map::find( program );
1773 if( it == Map::end() )
1775 // Uniform values always initialised as 0
1780 const UniformValueMap& uniforms = it->second;
1781 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
1782 if( it2 == uniforms.end() )
1784 // Uniform values always initialised as 0
1788 value = it2->second;
1795 ProgramUniformValue<int> mProgramUniforms1i;
1796 ProgramUniformValue<float> mProgramUniforms1f;
1797 ProgramUniformValue<Vector2> mProgramUniforms2f;
1798 ProgramUniformValue<Vector3> mProgramUniforms3f;
1799 ProgramUniformValue<Vector4> mProgramUniforms4f;
1800 ProgramUniformValue<Matrix> mProgramUniformsMat4;
1801 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
1803 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
1805 return mProgramUniforms1i;
1807 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
1809 return mProgramUniforms1f;
1811 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
1813 return mProgramUniforms2f;
1815 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
1817 return mProgramUniforms3f;
1819 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
1821 return mProgramUniforms4f;
1823 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
1825 return mProgramUniformsMat4;
1827 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
1829 return mProgramUniformsMat3;
1831 inline void SetVertexAttribArray(GLuint index, bool state)
1833 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1838 mVertexAttribArrayState[ index ] = state;
1839 mVertexAttribArrayChanged = true;
1842 ScissorParams mScissorParams;
1846 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
1852 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
1858 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
1860 return Vector2::ZERO;
1864 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
1866 return Vector3::ZERO;
1870 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
1872 return Vector4::ZERO;
1876 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
1882 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
1884 return Matrix3( Matrix() );
1889 bool BlendEnabled(const Dali::TraceCallStack& callStack);
1890 bool BlendDisabled(const Dali::TraceCallStack& callStack);
1895 #endif // __TEST_GL_ES_H__