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.
26 #include <cstring> // for strcmp
29 #include <dali/public-api/dali-core.h>
30 #include <dali/integration-api/core.h>
31 #include <dali/integration-api/gl-abstraction.h>
32 #include <dali/integration-api/gl-defines.h>
33 #include "test-trace-call-stack.h"
38 static const unsigned int MAX_ATTRIBUTE_CACHE_SIZE = 64;
39 static const char *mStdAttribs[MAX_ATTRIBUTE_CACHE_SIZE] =
41 "aPosition", // ATTRIB_POSITION
42 "aNormal", // ATTRIB_NORMAL
43 "aTexCoord", // ATTRIB_TEXCOORD
44 "aColor", // ATTRIB_COLOR
45 "aBoneWeights", // ATTRIB_BONE_WEIGHTS
46 "aBoneIndices" // ATTRIB_BONE_INDICES
49 class DALI_IMPORT_API TestGlAbstraction: public Dali::Integration::GlAbstraction
57 void PostRender(unsigned int timeDelta);
61 inline void ActiveTexture( GLenum textureUnit )
63 mActiveTextureUnit = textureUnit - GL_TEXTURE0;
66 inline GLenum GetActiveTextureUnit() const
68 return mActiveTextureUnit + GL_TEXTURE0;
71 inline void AttachShader( GLuint program, GLuint shader )
73 std::stringstream out;
74 out << program << ", " << shader;
75 mShaderTrace.PushCall("AttachShader", out.str());
78 inline void BindAttribLocation( GLuint program, GLuint index, const char* name )
82 inline void BindBuffer( GLenum target, GLuint buffer )
86 inline void BindFramebuffer( GLenum target, GLuint framebuffer )
90 inline void BindRenderbuffer( GLenum target, GLuint renderbuffer )
95 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
96 * @return A vector containing the IDs that were bound.
98 inline const std::vector<GLuint>& GetBoundTextures() const
100 return mBoundTextures;
104 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
105 * @param[in] activeTextureUnit The specific active texture unit.
106 * @return A vector containing the IDs that were bound.
108 inline const std::vector<GLuint>& GetBoundTextures( GLuint activeTextureUnit ) const
110 return mActiveTextures[ activeTextureUnit - GL_TEXTURE0 ].mBoundTextures;
114 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
116 inline void ClearBoundTextures()
118 mBoundTextures.clear();
120 for( unsigned int i=0; i<MIN_TEXTURE_UNIT_LIMIT; ++i )
122 mActiveTextures[ i ].mBoundTextures.clear();
126 inline void BindTexture( GLenum target, GLuint texture )
128 // Record the bound textures for future checks
131 mBoundTextures.push_back( texture );
133 if( mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT )
135 mActiveTextures[ mActiveTextureUnit ].mBoundTextures.push_back( texture );
139 std::stringstream out;
140 out << target << ", " << texture;
141 mTextureTrace.PushCall("BindTexture", out.str());
144 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
146 mLastBlendColor.r = red;
147 mLastBlendColor.g = green;
148 mLastBlendColor.b = blue;
149 mLastBlendColor.a = alpha;
152 inline const Vector4& GetLastBlendColor() const
154 return mLastBlendColor;
157 inline void BlendEquation( GLenum mode )
159 mLastBlendEquationRgb = mode;
160 mLastBlendEquationAlpha = mode;
163 inline void BlendEquationSeparate( GLenum modeRgb, GLenum modeAlpha )
165 mLastBlendEquationRgb = modeRgb;
166 mLastBlendEquationAlpha = modeAlpha;
169 inline GLenum GetLastBlendEquationRgb() const
171 return mLastBlendEquationRgb;
174 inline GLenum GetLastBlendEquationAlpha() const
176 return mLastBlendEquationAlpha;
179 inline void BlendFunc(GLenum sfactor, GLenum dfactor)
181 mLastBlendFuncSrcRgb = sfactor;
182 mLastBlendFuncDstRgb = dfactor;
183 mLastBlendFuncSrcAlpha = sfactor;
184 mLastBlendFuncDstAlpha = dfactor;
187 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
189 mLastBlendFuncSrcRgb = srcRGB;
190 mLastBlendFuncDstRgb = dstRGB;
191 mLastBlendFuncSrcAlpha = srcAlpha;
192 mLastBlendFuncDstAlpha = dstAlpha;
195 inline GLenum GetLastBlendFuncSrcRgb() const
197 return mLastBlendFuncSrcRgb;
200 inline GLenum GetLastBlendFuncDstRgb() const
202 return mLastBlendFuncDstRgb;
205 inline GLenum GetLastBlendFuncSrcAlpha() const
207 return mLastBlendFuncSrcAlpha;
210 inline GLenum GetLastBlendFuncDstAlpha() const
212 return mLastBlendFuncDstAlpha;
215 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
219 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
223 inline GLenum CheckFramebufferStatus(GLenum target)
225 return mCheckFramebufferStatusResult;
228 inline void Clear(GLbitfield mask)
231 mLastClearBitMask = mask;
234 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
238 inline void ClearDepthf(GLclampf depth)
242 inline void ClearStencil(GLint s)
246 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
250 inline void CompileShader(GLuint shader)
252 std::stringstream out;
254 mShaderTrace.PushCall("CompileShader", out.str());
257 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
261 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
265 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
269 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
273 inline GLuint CreateProgram(void)
275 mShaderTrace.PushCall("CreateProgram", "");
277 ++mLastProgramIdUsed;
278 mUniforms[mLastProgramIdUsed] = UniformIDMap();
279 return mLastProgramIdUsed;
282 inline GLuint CreateShader(GLenum type)
284 std::stringstream out;
286 mShaderTrace.PushCall("CreateShader", out.str());
288 return ++mLastShaderIdUsed;
291 inline void CullFace(GLenum mode)
293 std::stringstream out;
295 mCullFaceTrace.PushCall("CullFace", out.str());
298 inline void DeleteBuffers(GLsizei n, const GLuint* buffers)
302 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
306 inline void DeleteProgram(GLuint program)
308 std::stringstream out;
310 mShaderTrace.PushCall("DeleteProgram", out.str());
313 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
317 inline void DeleteShader(GLuint shader)
319 std::stringstream out;
321 mShaderTrace.PushCall("DeleteShader", out.str());
324 inline void DeleteTextures(GLsizei n, const GLuint* textures)
326 std::stringstream out;
327 out << n << ", " << textures << " = [" ;
329 for(GLsizei i=0; i<n; i++)
331 out << textures[i] << ", " ;
332 mDeletedTextureIds.push_back(textures[i]);
335 mTextureTrace.PushCall("DeleteTextures", out.str());
338 inline bool CheckNoTexturesDeleted()
340 return mDeletedTextureIds.size() == 0;
343 inline bool CheckTextureDeleted( GLuint textureId )
347 for(std::vector<GLuint>::iterator iter=mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
349 if(*iter == textureId)
358 inline void ClearDeletedTextures()
360 mDeletedTextureIds.clear();
363 inline void DepthFunc(GLenum func)
367 inline void DepthMask(GLboolean flag)
371 inline void DepthRangef(GLclampf zNear, GLclampf zFar)
375 inline void DetachShader(GLuint program, GLuint shader)
377 std::stringstream out;
378 out << program << ", " << shader;
379 mShaderTrace.PushCall("DetachShader", out.str());
382 inline void Disable(GLenum cap)
384 std::stringstream out;
386 mCullFaceTrace.PushCall("Disable", out.str());
389 inline void DisableVertexAttribArray(GLuint index)
391 SetVertexAttribArray( index, false );
394 inline void DrawArrays(GLenum mode, GLint first, GLsizei count)
396 std::stringstream out;
397 out << mode << ", " << first << ", " << count;
398 mDrawTrace.PushCall("DrawArrays", out.str());
401 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
403 std::stringstream out;
404 out << mode << ", " << count << ", " << type << ", indices";
405 mDrawTrace.PushCall("DrawElements", out.str());
408 inline void Enable(GLenum cap)
410 std::stringstream out;
412 mCullFaceTrace.PushCall("Enable", out.str());
415 inline void EnableVertexAttribArray(GLuint index)
417 SetVertexAttribArray( index, true);
420 inline void Finish(void)
424 inline void Flush(void)
428 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
432 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
436 inline void FrontFace(GLenum mode)
440 inline void GenBuffers(GLsizei n, GLuint* buffers)
442 // avoids an assert in GpuBuffers
446 inline void GenerateMipmap(GLenum target)
450 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers)
454 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
459 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
460 * @param[in] ids A vector containing the next IDs to be generated
462 inline void SetNextTextureIds( const std::vector<GLuint>& ids )
464 mNextTextureIds = ids;
467 inline const std::vector<GLuint>& GetNextTextureIds()
469 return mNextTextureIds;
472 inline void GenTextures(GLsizei n, GLuint* textures)
474 for( int i=0; i<n; ++i )
476 if( !mNextTextureIds.empty() )
478 *(textures+i) = mNextTextureIds[0];
479 mNextTextureIds.erase( mNextTextureIds.begin() );
483 *(textures+i) = ++mLastAutoTextureIdUsed;
487 std::stringstream out;
488 for(int i=0; i<n; i++)
496 mTextureTrace.PushCall("GenTextures", out.str());
499 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
503 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
507 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
511 inline int GetAttribLocation(GLuint program, const char* name)
513 std::string attribName(name);
515 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
517 if( mStdAttribs[i] == attribName )
523 // 0 is a valid location
527 inline void GetBooleanv(GLenum pname, GLboolean* params)
531 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
535 inline GLenum GetError(void)
537 return mGetErrorResult;
540 inline void GetFloatv(GLenum pname, GLfloat* params)
544 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
548 inline void GetIntegerv(GLenum pname, GLint* params)
552 case GL_MAX_TEXTURE_SIZE:
555 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
558 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
559 *params = mNumBinaryFormats;
561 case GL_PROGRAM_BINARY_FORMATS_OES:
562 *params = mBinaryFormats;
567 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
571 *params = mLinkStatus;
573 case GL_PROGRAM_BINARY_LENGTH_OES:
574 *params = mProgramBinaryLength;
579 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
584 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
588 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
591 case GL_COMPILE_STATUS:
592 *params = mCompileStatus;
597 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
601 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
605 inline const GLubyte* GetString(GLenum name)
607 return mGetStringResult;
610 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
614 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
618 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
622 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
626 inline GLint GetUniformLocation(GLuint program, const char* name)
628 ProgramUniformMap::iterator it = mUniforms.find(program);
629 if( it == mUniforms.end() )
631 // Not a valid program ID
632 mGetErrorResult = GL_INVALID_OPERATION;
636 UniformIDMap& uniformIDs = it->second;
637 UniformIDMap::iterator it2 = uniformIDs.find( name );
638 if( it2 == uniformIDs.end() )
640 // Uniform not found, so add it...
641 uniformIDs[name] = ++mLastUniformIdUsed;
642 return mLastUniformIdUsed;
648 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
652 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
656 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
660 inline void Hint(GLenum target, GLenum mode)
664 inline GLboolean IsBuffer(GLuint buffer)
666 return mIsBufferResult;
669 inline GLboolean IsEnabled(GLenum cap)
671 return mIsEnabledResult;
674 inline GLboolean IsFramebuffer(GLuint framebuffer)
676 return mIsFramebufferResult;
679 inline GLboolean IsProgram(GLuint program)
681 return mIsProgramResult;
684 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
686 return mIsRenderbufferResult;
689 inline GLboolean IsShader(GLuint shader)
691 return mIsShaderResult;
694 inline GLboolean IsTexture(GLuint texture)
696 return mIsTextureResult;
699 inline void LineWidth(GLfloat width)
703 inline void LinkProgram(GLuint program)
705 std::stringstream out;
707 mShaderTrace.PushCall("LinkProgram", out.str());
710 inline void PixelStorei(GLenum pname, GLint param)
714 inline void PolygonOffset(GLfloat factor, GLfloat units)
718 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
722 inline void ReleaseShaderCompiler(void)
726 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
730 inline void SampleCoverage(GLclampf value, GLboolean invert)
734 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
736 mScissorParams.x = x;
737 mScissorParams.y = y;
738 mScissorParams.width = width;
739 mScissorParams.height = height;
742 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
746 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
748 std::string stringBuilder;
749 for(int i = 0; i < count; ++i)
751 stringBuilder += string[i];
753 mShaderSources[shader] = stringBuilder;
754 mLastShaderCompiled = shader;
757 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
759 const std::string shaderSource = mShaderSources[shader];
760 if( static_cast<int>(shaderSource.length()) < bufsize )
762 strcpy(source, shaderSource.c_str());
763 *length = shaderSource.length();
767 *length = bufsize -1;
768 strncpy(source, shaderSource.c_str(), *length);
769 source[*length] = 0x0;
773 inline std::string GetShaderSource(GLuint shader)
775 return mShaderSources[shader];
778 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
782 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
786 inline void StencilMask(GLuint mask)
790 inline void StencilMaskSeparate(GLenum face, GLuint mask)
794 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
798 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
802 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
804 std::stringstream out;
805 out << width << ", " << height;
806 mTextureTrace.PushCall("TexImage2D", out.str());
809 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
811 std::stringstream out;
812 out << target << ", " << pname << ", " << param;
813 mTexParamaterTrace.PushCall("TexParameterf", out.str());
816 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
818 std::stringstream out;
819 out << target << ", " << pname << ", " << params[0];
820 mTexParamaterTrace.PushCall("TexParameterfv", out.str());
823 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
825 std::stringstream out;
826 out << target << ", " << pname << ", " << param;
827 mTexParamaterTrace.PushCall("TexParameteri", out.str());
830 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
832 std::stringstream out;
833 out << target << ", " << pname << ", " << params[0];
834 mTexParamaterTrace.PushCall("TexParameteriv", out.str());
837 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
839 std::stringstream out;
840 out << xoffset << ", " << yoffset << ", " << width << ", " << height;
841 mTextureTrace.PushCall("TexSubImage2D", out.str());
844 inline void Uniform1f(GLint location, GLfloat x)
846 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, x ) )
848 mGetErrorResult = GL_INVALID_OPERATION;
852 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
854 for( int i = 0; i < count; ++i )
856 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
858 mGetErrorResult = GL_INVALID_OPERATION;
864 inline void Uniform1i(GLint location, GLint x)
866 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
868 mGetErrorResult = GL_INVALID_OPERATION;
872 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
874 for( int i = 0; i < count; ++i )
876 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
880 mGetErrorResult = GL_INVALID_OPERATION;
886 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
888 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
892 mGetErrorResult = GL_INVALID_OPERATION;
896 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
898 for( int i = 0; i < count; ++i )
900 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
902 Vector2( v[2*i], v[2*i+1] ) ) )
904 mGetErrorResult = GL_INVALID_OPERATION;
910 inline void Uniform2i(GLint location, GLint x, GLint y)
914 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
918 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
920 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
922 Vector3( x, y, z ) ) )
924 mGetErrorResult = GL_INVALID_OPERATION;
928 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
930 for( int i = 0; i < count; ++i )
932 if( ! mProgramUniforms3f.SetUniformValue(
935 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
937 mGetErrorResult = GL_INVALID_OPERATION;
943 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
947 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
951 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
953 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
955 Vector4( x, y, z, w ) ) )
957 mGetErrorResult = GL_INVALID_OPERATION;
961 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
963 for( int i = 0; i < count; ++i )
965 if( ! mProgramUniforms4f.SetUniformValue(
968 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
970 mGetErrorResult = GL_INVALID_OPERATION;
976 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
980 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
984 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
988 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
990 for( int i = 0; i < count; ++i )
992 if( ! mProgramUniformsMat3.SetUniformValue(
995 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
997 mGetErrorResult = GL_INVALID_OPERATION;
1003 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1005 for( int i = 0; i < count; ++i )
1007 if( ! mProgramUniformsMat4.SetUniformValue(
1012 mGetErrorResult = GL_INVALID_OPERATION;
1018 inline void UseProgram(GLuint program)
1020 mCurrentProgram = program;
1023 inline void ValidateProgram(GLuint program)
1027 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1031 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1035 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1039 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1043 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1047 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1051 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1055 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1059 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1063 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1069 inline void ReadBuffer(GLenum mode)
1073 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1077 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1081 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)
1085 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1089 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1093 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)
1097 inline void GenQueries(GLsizei n, GLuint* ids)
1101 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1105 inline GLboolean IsQuery(GLuint id)
1110 inline void BeginQuery(GLenum target, GLuint id)
1114 inline void EndQuery(GLenum target)
1118 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1122 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1126 inline GLboolean UnmapBuffer(GLenum target)
1131 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1135 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1139 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1143 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1147 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1151 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1155 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1159 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1163 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1167 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1171 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1175 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1180 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1184 inline void BindVertexArray(GLuint array)
1188 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1192 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1196 inline GLboolean IsVertexArray(GLuint array)
1201 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1205 inline void BeginTransformFeedback(GLenum primitiveMode)
1209 inline void EndTransformFeedback(void)
1213 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1217 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1221 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1225 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1229 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1233 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1237 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1241 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1245 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1249 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1253 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1257 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1261 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1266 inline void Uniform1ui(GLint location, GLuint v0)
1270 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1274 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1278 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1282 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1286 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1290 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1294 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1298 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1302 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1306 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1310 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1314 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1319 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1323 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1327 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1331 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1333 return GL_INVALID_INDEX;
1336 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1340 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1344 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1348 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1352 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1356 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1361 inline GLboolean IsSync(GLsync sync)
1366 inline void DeleteSync(GLsync sync)
1370 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1375 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1379 inline void GetInteger64v(GLenum pname, GLint64* params)
1383 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1387 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1391 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1395 inline void GenSamplers(GLsizei count, GLuint* samplers)
1399 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1403 inline GLboolean IsSampler(GLuint sampler)
1408 inline void BindSampler(GLuint unit, GLuint sampler)
1412 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1416 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1420 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1424 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1428 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1432 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1436 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1440 inline void BindTransformFeedback(GLenum target, GLuint id)
1444 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1448 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1452 inline GLboolean IsTransformFeedback(GLuint id)
1457 inline void PauseTransformFeedback(void)
1461 inline void ResumeTransformFeedback(void)
1465 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1467 mGetProgramBinaryCalled = true;
1470 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1474 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1478 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1482 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1486 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1490 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1494 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1498 public: // TEST FUNCTIONS
1499 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1500 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1501 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1502 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1503 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1504 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1505 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1506 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1507 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1508 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1509 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1510 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1511 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1512 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1513 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1514 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1516 inline bool GetVertexAttribArrayState(GLuint index)
1518 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1523 return mVertexAttribArrayState[ index ];
1525 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1526 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1528 //Methods for CullFace verification
1529 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1530 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1531 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1533 //Methods for Shader verification
1534 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1535 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1536 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1538 //Methods for Texture verification
1539 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1540 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1541 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1543 //Methods for Texture verification
1544 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1545 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1546 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1548 //Methods for Draw verification
1549 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1550 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1551 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1553 template <typename T>
1554 inline bool GetUniformValue( const char* name, T& value ) const
1556 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1557 program_it != mUniforms.end();
1560 const UniformIDMap &uniformIDs = program_it->second;
1562 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1563 if( uniform_it != uniformIDs.end() )
1565 // found one matching uniform name, lets check the value...
1566 GLuint programId = program_it->first;
1567 GLint uniformId = uniform_it->second;
1569 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1570 return mProgramUniforms.GetUniformValue( programId, uniformId, value );
1577 template <typename T>
1578 inline bool CheckUniformValue( const char* name, const T& value ) const
1580 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1581 program_it != mUniforms.end();
1584 const UniformIDMap &uniformIDs = program_it->second;
1586 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1587 if( uniform_it != uniformIDs.end() )
1589 // found one matching uniform name, lets check the value...
1590 GLuint programId = program_it->first;
1591 GLint uniformId = uniform_it->second;
1593 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1594 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
1596 // the value matches
1602 fprintf(stderr, "Not found, printing possible values:\n" );
1603 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1604 program_it != mUniforms.end();
1607 const UniformIDMap &uniformIDs = program_it->second;
1609 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1610 if( uniform_it != uniformIDs.end() )
1612 // found one matching uniform name, lets check the value...
1613 GLuint programId = program_it->first;
1614 GLint uniformId = uniform_it->second;
1616 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1618 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
1620 std::stringstream out;
1621 out << uniform_it->first << ": " << origValue;
1622 fprintf(stderr, "%s\n", out.str().c_str() );
1629 template <typename T>
1630 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
1632 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
1633 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
1636 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
1638 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1639 program_it != mUniforms.end();
1642 const UniformIDMap &uniformIDs = program_it->second;
1644 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1645 if( uniform_it != uniformIDs.end() )
1647 programId = program_it->first;
1648 uniformId = uniform_it->second;
1655 inline GLuint GetLastShaderCompiled() const
1657 return mLastShaderCompiled;
1660 inline GLuint GetLastProgramCreated() const
1662 return mLastProgramIdUsed;
1665 inline GLbitfield GetLastClearMask() const
1667 return mLastClearBitMask;
1672 ATTRIB_UNKNOWN = -1,
1677 ATTRIB_BONE_WEIGHTS,
1678 ATTRIB_BONE_INDICES,
1682 struct ScissorParams
1689 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
1692 // Methods to check scissor tests
1693 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
1695 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
1697 inline unsigned int GetClearCountCalled() const { return mClearCount; }
1700 GLuint mCurrentProgram;
1701 GLuint mCompileStatus;
1703 GLint mGetAttribLocationResult;
1704 GLenum mGetErrorResult;
1705 GLubyte* mGetStringResult;
1706 GLboolean mIsBufferResult;
1707 GLboolean mIsEnabledResult;
1708 GLboolean mIsFramebufferResult;
1709 GLboolean mIsProgramResult;
1710 GLboolean mIsRenderbufferResult;
1711 GLboolean mIsShaderResult;
1712 GLboolean mIsTextureResult;
1713 GLenum mActiveTextureUnit;
1714 GLenum mCheckFramebufferStatusResult;
1715 GLint mNumBinaryFormats;
1716 GLint mBinaryFormats;
1717 GLint mProgramBinaryLength;
1718 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
1719 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
1720 bool mGetProgramBinaryCalled;
1721 typedef std::map< GLuint, std::string> ShaderSourceMap;
1722 ShaderSourceMap mShaderSources;
1723 GLuint mLastShaderCompiled;
1724 GLbitfield mLastClearBitMask;
1725 unsigned int mClearCount;
1727 Vector4 mLastBlendColor;
1728 GLenum mLastBlendEquationRgb;
1729 GLenum mLastBlendEquationAlpha;
1730 GLenum mLastBlendFuncSrcRgb;
1731 GLenum mLastBlendFuncDstRgb;
1732 GLenum mLastBlendFuncSrcAlpha;
1733 GLenum mLastBlendFuncDstAlpha;
1735 // Data for manipulating the IDs returned by GenTextures
1736 GLuint mLastAutoTextureIdUsed;
1737 std::vector<GLuint> mNextTextureIds;
1738 std::vector<GLuint> mDeletedTextureIds;
1739 std::vector<GLuint> mBoundTextures;
1741 struct ActiveTextureType
1743 std::vector<GLuint> mBoundTextures;
1746 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
1748 TraceCallStack mCullFaceTrace;
1749 TraceCallStack mShaderTrace;
1750 TraceCallStack mTextureTrace;
1751 TraceCallStack mTexParamaterTrace;
1752 TraceCallStack mDrawTrace;
1754 // Shaders & Uniforms
1755 GLuint mLastShaderIdUsed;
1756 GLuint mLastProgramIdUsed;
1757 GLuint mLastUniformIdUsed;
1758 typedef std::map< std::string, GLint > UniformIDMap;
1759 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
1760 ProgramUniformMap mUniforms;
1762 template <typename T>
1763 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
1766 typedef std::map< GLint, T > UniformValueMap;
1767 typedef std::map< GLuint, UniformValueMap > Map;
1769 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
1776 typename Map::iterator it = Map::find( program );
1777 if( it == Map::end() )
1779 // if its the first uniform for this program add it
1780 std::pair< typename Map::iterator, bool > result =
1781 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
1785 UniformValueMap& uniforms = it->second;
1786 uniforms[uniform] = value;
1791 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
1794 if ( GetUniformValue( program, uniform, uniformValue ) )
1796 return value == uniformValue;
1802 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
1809 typename Map::const_iterator it = Map::find( program );
1810 if( it == Map::end() )
1812 // Uniform values always initialised as 0
1817 const UniformValueMap& uniforms = it->second;
1818 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
1819 if( it2 == uniforms.end() )
1821 // Uniform values always initialised as 0
1825 value = it2->second;
1832 ProgramUniformValue<int> mProgramUniforms1i;
1833 ProgramUniformValue<float> mProgramUniforms1f;
1834 ProgramUniformValue<Vector2> mProgramUniforms2f;
1835 ProgramUniformValue<Vector3> mProgramUniforms3f;
1836 ProgramUniformValue<Vector4> mProgramUniforms4f;
1837 ProgramUniformValue<Matrix> mProgramUniformsMat4;
1838 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
1840 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
1842 return mProgramUniforms1i;
1844 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
1846 return mProgramUniforms1f;
1848 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
1850 return mProgramUniforms2f;
1852 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
1854 return mProgramUniforms3f;
1856 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
1858 return mProgramUniforms4f;
1860 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
1862 return mProgramUniformsMat4;
1864 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
1866 return mProgramUniformsMat3;
1868 inline void SetVertexAttribArray(GLuint index, bool state)
1870 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1875 mVertexAttribArrayState[ index ] = state;
1876 mVertexAttribArrayChanged = true;
1879 ScissorParams mScissorParams;
1883 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
1889 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
1895 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
1897 return Vector2::ZERO;
1901 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
1903 return Vector3::ZERO;
1907 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
1909 return Vector4::ZERO;
1913 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
1919 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
1921 return Matrix3( Matrix() );
1926 bool BlendEnabled(const Dali::TraceCallStack& callStack);
1927 bool BlendDisabled(const Dali::TraceCallStack& callStack);
1932 #endif // __TEST_GL_ES_H__