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;
77 TraceCallStack::NamedParams namedParams;
78 namedParams["program"] = ToString(program);
79 namedParams["shader"] = ToString(shader);
80 mShaderTrace.PushCall("AttachShader", out.str(), namedParams);
83 inline void BindAttribLocation( GLuint program, GLuint index, const char* name )
87 inline void BindBuffer( GLenum target, GLuint buffer )
91 inline void BindFramebuffer( GLenum target, GLuint framebuffer )
94 mFramebufferStatus |= 2;
97 inline void BindRenderbuffer( GLenum target, GLuint renderbuffer )
102 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
103 * @return A vector containing the IDs that were bound.
105 inline const std::vector<GLuint>& GetBoundTextures() const
107 return mBoundTextures;
111 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
112 * @param[in] activeTextureUnit The specific active texture unit.
113 * @return A vector containing the IDs that were bound.
115 inline const std::vector<GLuint>& GetBoundTextures( GLuint activeTextureUnit ) const
117 return mActiveTextures[ activeTextureUnit - GL_TEXTURE0 ].mBoundTextures;
121 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
123 inline void ClearBoundTextures()
125 mBoundTextures.clear();
127 for( unsigned int i=0; i<MIN_TEXTURE_UNIT_LIMIT; ++i )
129 mActiveTextures[ i ].mBoundTextures.clear();
133 inline void BindTexture( GLenum target, GLuint texture )
135 // Record the bound textures for future checks
138 mBoundTextures.push_back( texture );
140 if( mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT )
142 mActiveTextures[ mActiveTextureUnit ].mBoundTextures.push_back( texture );
146 std::stringstream out;
147 out << target << ", " << texture;
149 TraceCallStack::NamedParams namedParams;
150 namedParams["target"] = ToString(target);
151 namedParams["texture"] = ToString(texture);
153 mTextureTrace.PushCall("BindTexture", out.str(), namedParams);
156 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
158 mLastBlendColor.r = red;
159 mLastBlendColor.g = green;
160 mLastBlendColor.b = blue;
161 mLastBlendColor.a = alpha;
164 inline const Vector4& GetLastBlendColor() const
166 return mLastBlendColor;
169 inline void BlendEquation( GLenum mode )
171 mLastBlendEquationRgb = mode;
172 mLastBlendEquationAlpha = mode;
175 inline void BlendEquationSeparate( GLenum modeRgb, GLenum modeAlpha )
177 mLastBlendEquationRgb = modeRgb;
178 mLastBlendEquationAlpha = modeAlpha;
181 inline GLenum GetLastBlendEquationRgb() const
183 return mLastBlendEquationRgb;
186 inline GLenum GetLastBlendEquationAlpha() const
188 return mLastBlendEquationAlpha;
191 inline void BlendFunc(GLenum sfactor, GLenum dfactor)
193 mLastBlendFuncSrcRgb = sfactor;
194 mLastBlendFuncDstRgb = dfactor;
195 mLastBlendFuncSrcAlpha = sfactor;
196 mLastBlendFuncDstAlpha = dfactor;
199 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
201 mLastBlendFuncSrcRgb = srcRGB;
202 mLastBlendFuncDstRgb = dstRGB;
203 mLastBlendFuncSrcAlpha = srcAlpha;
204 mLastBlendFuncDstAlpha = dstAlpha;
207 inline GLenum GetLastBlendFuncSrcRgb() const
209 return mLastBlendFuncSrcRgb;
212 inline GLenum GetLastBlendFuncDstRgb() const
214 return mLastBlendFuncDstRgb;
217 inline GLenum GetLastBlendFuncSrcAlpha() const
219 return mLastBlendFuncSrcAlpha;
222 inline GLenum GetLastBlendFuncDstAlpha() const
224 return mLastBlendFuncDstAlpha;
227 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
229 mBufferDataCalls.push_back(size);
232 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
234 mBufferSubDataCalls.push_back(size);
237 inline GLenum CheckFramebufferStatus(GLenum target)
239 //If it has the three last bits set to 1 - 111, then the three minimum functions to create a
240 //Framebuffer texture have been called
241 if( mFramebufferStatus == 7 )
243 return GL_FRAMEBUFFER_COMPLETE;
246 return mCheckFramebufferStatusResult;
249 inline GLenum CheckFramebufferColorAttachment()
251 return mFramebufferColorAttached;
254 inline GLenum CheckFramebufferDepthAttachment()
256 return mFramebufferDepthAttached;
259 inline GLenum CheckFramebufferStencilAttachment()
261 return mFramebufferStencilAttached;
264 inline void Clear(GLbitfield mask)
267 mLastClearBitMask = mask;
270 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
274 inline void ClearDepthf(GLclampf depth)
278 inline void ClearStencil(GLint s)
280 std::stringstream out;
283 TraceCallStack::NamedParams namedParams;
284 namedParams["s"] = ToString( s );
286 mStencilFunctionTrace.PushCall( "ClearStencil", out.str(), namedParams );
289 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
291 mColorMaskParams.red = red;
292 mColorMaskParams.green = green;
293 mColorMaskParams.blue = blue;
294 mColorMaskParams.alpha = alpha;
297 inline void CompileShader(GLuint shader)
299 std::stringstream out;
301 TraceCallStack::NamedParams namedParams;
302 namedParams["shader"] = ToString(shader);
304 mShaderTrace.PushCall("CompileShader", out.str(), namedParams);
307 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
309 std::stringstream out;
310 out << target<<", "<<level<<", "<<width << ", " << height;
312 TraceCallStack::NamedParams namedParams;
313 namedParams["target"] = ToString(target);
314 namedParams["level"] = ToString(level);
315 namedParams["internalformat"] = ToString(internalformat);
316 namedParams["width"] = ToString(width);
317 namedParams["height"] = ToString(height);
318 namedParams["border"] = ToString(border);
319 namedParams["size"] = ToString(imageSize);
321 mTextureTrace.PushCall("CompressedTexImage2D", out.str(), namedParams);
324 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
326 std::stringstream out;
327 out << target << ", "<<level <<", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
329 TraceCallStack::NamedParams namedParams;
330 namedParams["target"] = ToString(target);
331 namedParams["level"] = ToString(level);
332 namedParams["xoffset"] = ToString(xoffset);
333 namedParams["yoffset"] = ToString(yoffset);
334 namedParams["width"] = ToString(width);
335 namedParams["height"] = ToString(height);
336 mTextureTrace.PushCall("CompressedTexSubImage2D", out.str(), namedParams);
339 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
343 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
347 inline GLuint CreateProgram(void)
349 mShaderTrace.PushCall("CreateProgram", "");
351 ++mLastProgramIdUsed;
352 mUniforms[mLastProgramIdUsed] = UniformIDMap();
353 return mLastProgramIdUsed;
356 inline GLuint CreateShader(GLenum type)
358 std::stringstream out;
361 TraceCallStack::NamedParams namedParams;
362 namedParams["type"] = ToString(type);
363 mShaderTrace.PushCall("CreateShader", out.str(), namedParams);
365 return ++mLastShaderIdUsed;
368 inline void CullFace(GLenum mode)
370 std::stringstream out;
373 TraceCallStack::NamedParams namedParams;
374 namedParams["program"] = ToString(mode);
376 mCullFaceTrace.PushCall("CullFace", out.str(), namedParams);
379 inline void DeleteBuffers(GLsizei n, const GLuint* buffers)
383 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
387 inline void DeleteProgram(GLuint program)
389 std::stringstream out;
392 TraceCallStack::NamedParams namedParams;
393 namedParams["program"] = ToString(program);
395 mShaderTrace.PushCall("DeleteProgram", out.str(), namedParams);
398 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
402 inline void DeleteShader(GLuint shader)
404 std::stringstream out;
407 TraceCallStack::NamedParams namedParams;
408 namedParams["shader"] = ToString(shader);
410 mShaderTrace.PushCall("DeleteShader", out.str(), namedParams);
413 inline void DeleteTextures(GLsizei n, const GLuint* textures)
415 std::stringstream out;
416 out << n << ", " << textures << " = [";
418 TraceCallStack::NamedParams namedParams;
420 for(GLsizei i=0; i<n; i++)
422 out << textures[i] << ", ";
423 std::stringstream paramName;
424 paramName<<"texture["<<i<<"]";
425 namedParams[paramName.str()] = ToString(textures[i]);
426 mDeletedTextureIds.push_back(textures[i]);
430 mTextureTrace.PushCall("DeleteTextures", out.str(), namedParams);
433 inline bool CheckNoTexturesDeleted()
435 return mDeletedTextureIds.size() == 0;
438 inline bool CheckTextureDeleted( GLuint textureId )
442 for(std::vector<GLuint>::iterator iter=mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
444 if(*iter == textureId)
453 inline void ClearDeletedTextures()
455 mDeletedTextureIds.clear();
458 inline void DepthFunc(GLenum func)
460 std::stringstream out;
463 TraceCallStack::NamedParams namedParams;
464 namedParams["func"] = ToString(func);
466 mDepthFunctionTrace.PushCall("DepthFunc", out.str(), namedParams);
469 inline void DepthMask(GLboolean flag)
473 inline void DepthRangef(GLclampf zNear, GLclampf zFar)
477 inline void DetachShader(GLuint program, GLuint shader)
479 std::stringstream out;
480 out << program << ", " << shader;
481 TraceCallStack::NamedParams namedParams;
482 namedParams["program"] = ToString(program);
483 namedParams["shader"] = ToString(shader);
484 mShaderTrace.PushCall("DetachShader", out.str(), namedParams);
487 inline void Disable(GLenum cap)
489 std::stringstream out;
491 TraceCallStack::NamedParams namedParams;
492 namedParams["cap"] = ToString(cap);
493 mEnableDisableTrace.PushCall("Disable", out.str(), namedParams);
496 inline void DisableVertexAttribArray(GLuint index)
498 SetVertexAttribArray( index, false );
501 inline void DrawArrays(GLenum mode, GLint first, GLsizei count)
503 std::stringstream out;
504 out << mode << ", " << first << ", " << count;
505 TraceCallStack::NamedParams namedParams;
506 namedParams["mode"] = ToString(mode);
507 namedParams["first"] = ToString(first);
508 namedParams["count"] = ToString(count);
509 mDrawTrace.PushCall("DrawArrays", out.str(), namedParams);
512 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
514 std::stringstream out;
515 out << mode << ", " << count << ", " << type << ", indices";
517 TraceCallStack::NamedParams namedParams;
518 namedParams["mode"] = ToString(mode);
519 namedParams["count"] = ToString(count);
520 namedParams["type"] = ToString(type);
521 // Skip void pointers - are they of any use?
522 mDrawTrace.PushCall("DrawElements", out.str(), namedParams);
525 inline void Enable(GLenum cap)
527 std::stringstream out;
529 TraceCallStack::NamedParams namedParams;
530 namedParams["cap"] = ToString(cap);
531 mEnableDisableTrace.PushCall("Enable", out.str(), namedParams);
534 inline void EnableVertexAttribArray(GLuint index)
536 SetVertexAttribArray( index, true);
539 inline void Finish(void)
543 inline void Flush(void)
547 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
549 if (attachment == GL_DEPTH_ATTACHMENT)
551 mFramebufferDepthAttached = true;
553 else if (attachment == GL_STENCIL_ATTACHMENT)
555 mFramebufferStencilAttached = true;
559 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
562 mFramebufferStatus |= 4;
564 //We check 4 attachment colors
565 if ((attachment == GL_COLOR_ATTACHMENT0) || (attachment == GL_COLOR_ATTACHMENT1) || (attachment == GL_COLOR_ATTACHMENT2) || (attachment == GL_COLOR_ATTACHMENT4))
567 mFramebufferColorAttached = true;
571 inline void FrontFace(GLenum mode)
575 inline void GenBuffers(GLsizei n, GLuint* buffers)
577 // avoids an assert in GpuBuffers
581 inline void GenerateMipmap(GLenum target)
583 std::stringstream out;
585 TraceCallStack::NamedParams namedParams;
586 namedParams["target"] = ToString(target);
588 mTextureTrace.PushCall("GenerateMipmap", out.str(), namedParams);
591 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers)
593 for( int i = 0; i < n; i++ )
595 framebuffers[i] = i + 1;
598 //Add 001 bit, this function needs to be called the first one in the chain
599 mFramebufferStatus = 1;
602 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
604 for( int i = 0; i < n; i++ )
606 renderbuffers[i] = i + 1;
611 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
612 * @param[in] ids A vector containing the next IDs to be generated
614 inline void SetNextTextureIds( const std::vector<GLuint>& ids )
616 mNextTextureIds = ids;
619 inline const std::vector<GLuint>& GetNextTextureIds()
621 return mNextTextureIds;
624 inline void GenTextures(GLsizei count, GLuint* textures)
626 for( int i=0; i<count; ++i )
628 if( !mNextTextureIds.empty() )
630 *(textures+i) = mNextTextureIds[0];
631 mNextTextureIds.erase( mNextTextureIds.begin() );
635 *(textures+i) = ++mLastAutoTextureIdUsed;
639 TraceCallStack::NamedParams namedParams;
640 namedParams["count"] = ToString(count);
642 std::stringstream out;
643 for(int i=0; i<count; i++)
650 std::ostringstream oss;
651 oss<<"indices["<<i<<"]";
652 namedParams[oss.str()] = ToString(textures[i]);
655 mTextureTrace.PushCall("GenTextures", out.str(), namedParams);
658 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
662 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
667 *length = snprintf(name, bufsize, "sTexture");
668 *type = GL_SAMPLER_2D;
672 *length = snprintf(name, bufsize, "sEffect");
673 *type = GL_SAMPLER_2D;
677 *length = snprintf(name, bufsize, "sGloss");
678 *type = GL_SAMPLER_2D;
686 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
690 inline int GetAttribLocation(GLuint program, const char* name)
692 std::string attribName(name);
694 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
696 if( mStdAttribs[i] == attribName )
702 // 0 is a valid location
706 inline void GetBooleanv(GLenum pname, GLboolean* params)
710 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
714 inline GLenum GetError(void)
716 return mGetErrorResult;
719 inline void GetFloatv(GLenum pname, GLfloat* params)
723 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
727 inline void GetIntegerv(GLenum pname, GLint* params)
731 case GL_MAX_TEXTURE_SIZE:
734 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
737 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
738 *params = mNumBinaryFormats;
740 case GL_PROGRAM_BINARY_FORMATS_OES:
741 *params = mBinaryFormats;
746 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
751 *params = mLinkStatus;
753 case GL_PROGRAM_BINARY_LENGTH_OES:
754 *params = mProgramBinaryLength;
756 case GL_ACTIVE_UNIFORMS:
757 *params = mNumberOfActiveUniforms;
759 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
765 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
769 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
773 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
776 case GL_COMPILE_STATUS:
777 *params = mCompileStatus;
782 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
786 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
790 inline const GLubyte* GetString(GLenum name)
792 return mGetStringResult;
795 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
799 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
803 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
807 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
811 inline GLint GetUniformLocation(GLuint program, const char* name)
813 ProgramUniformMap::iterator it = mUniforms.find(program);
814 if( it == mUniforms.end() )
816 // Not a valid program ID
817 mGetErrorResult = GL_INVALID_OPERATION;
821 UniformIDMap& uniformIDs = it->second;
822 UniformIDMap::iterator it2 = uniformIDs.find( name );
823 if( it2 == uniformIDs.end() )
825 // Uniform not found, so add it...
826 uniformIDs[name] = ++mLastUniformIdUsed;
827 return mLastUniformIdUsed;
833 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
837 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
841 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
845 inline void Hint(GLenum target, GLenum mode)
849 inline GLboolean IsBuffer(GLuint buffer)
851 return mIsBufferResult;
854 inline GLboolean IsEnabled(GLenum cap)
856 return mIsEnabledResult;
859 inline GLboolean IsFramebuffer(GLuint framebuffer)
861 return mIsFramebufferResult;
864 inline GLboolean IsProgram(GLuint program)
866 return mIsProgramResult;
869 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
871 return mIsRenderbufferResult;
874 inline GLboolean IsShader(GLuint shader)
876 return mIsShaderResult;
879 inline GLboolean IsTexture(GLuint texture)
881 return mIsTextureResult;
884 inline void LineWidth(GLfloat width)
888 inline void LinkProgram(GLuint program)
890 std::stringstream out;
893 TraceCallStack::NamedParams namedParams;
894 namedParams["program"] = ToString(program);
895 mShaderTrace.PushCall("LinkProgram", out.str(), namedParams);
897 mNumberOfActiveUniforms=3;
898 GetUniformLocation(program, "sTexture");
899 GetUniformLocation(program, "sEffect");
900 GetUniformLocation(program, "sGloss");
903 inline void PixelStorei(GLenum pname, GLint param)
907 inline void PolygonOffset(GLfloat factor, GLfloat units)
911 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
915 inline void ReleaseShaderCompiler(void)
919 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
923 inline void SampleCoverage(GLclampf value, GLboolean invert)
927 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
929 mScissorParams.x = x;
930 mScissorParams.y = y;
931 mScissorParams.width = width;
932 mScissorParams.height = height;
935 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
939 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
941 std::string stringBuilder;
942 for(int i = 0; i < count; ++i)
944 stringBuilder += string[i];
946 mShaderSources[shader] = stringBuilder;
947 mLastShaderCompiled = shader;
950 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
952 const std::string shaderSource = mShaderSources[shader];
953 if( static_cast<int>(shaderSource.length()) < bufsize )
955 strcpy(source, shaderSource.c_str());
956 *length = shaderSource.length();
960 *length = bufsize -1;
961 strncpy(source, shaderSource.c_str(), *length);
962 source[*length] = 0x0;
966 inline std::string GetShaderSource(GLuint shader)
968 return mShaderSources[shader];
971 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
973 std::stringstream out;
974 out << func << ", " << ref << ", " << mask;
976 TraceCallStack::NamedParams namedParams;
977 namedParams["func"] = ToString( func );
978 namedParams["ref"] = ToString( ref );
979 namedParams["mask"] = ToString( mask );
981 mStencilFunctionTrace.PushCall( "StencilFunc", out.str(), namedParams );
984 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
986 std::stringstream out;
987 out << face << ", " << func << ", " << ref << ", " << mask;
989 TraceCallStack::NamedParams namedParams;
990 namedParams["face"] = ToString( face );
991 namedParams["func"] = ToString( func );
992 namedParams["ref"] = ToString( ref );
993 namedParams["mask"] = ToString( mask );
995 mStencilFunctionTrace.PushCall( "StencilFuncSeparate", out.str(), namedParams );
998 inline void StencilMask(GLuint mask)
1000 std::stringstream out;
1003 TraceCallStack::NamedParams namedParams;
1004 namedParams["mask"] = ToString( mask );
1006 mStencilFunctionTrace.PushCall( "StencilMask", out.str(), namedParams );
1009 inline void StencilMaskSeparate(GLenum face, GLuint mask)
1011 std::stringstream out;
1012 out << face << ", " << mask;
1014 TraceCallStack::NamedParams namedParams;
1015 namedParams["face"] = ToString( face );
1016 namedParams["mask"] = ToString( mask );
1018 mStencilFunctionTrace.PushCall( "StencilMaskSeparate", out.str(), namedParams );
1021 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
1023 std::stringstream out;
1024 out << fail << ", " << zfail << ", " << zpass;
1026 TraceCallStack::NamedParams namedParams;
1027 namedParams["fail"] = ToString( fail );
1028 namedParams["zfail"] = ToString( zfail );
1029 namedParams["zpass"] = ToString( zpass );
1031 mStencilFunctionTrace.PushCall( "StencilOp", out.str(), namedParams );
1034 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
1036 std::stringstream out;
1037 out << face << ", " << fail << ", " << zfail << "," << zpass;
1039 TraceCallStack::NamedParams namedParams;
1040 namedParams["face"] = ToString( face );
1041 namedParams["fail"] = ToString( fail );
1042 namedParams["zfail"] = ToString( zfail );
1043 namedParams["zpass"] = ToString( zpass );
1045 mStencilFunctionTrace.PushCall( "StencilOpSeparate", out.str(), namedParams );
1048 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
1050 std::stringstream out;
1051 out << target<<", "<<level<<", "<<width << ", " << height;
1053 TraceCallStack::NamedParams namedParams;
1054 namedParams["target"] = ToString(target);
1055 namedParams["level"] = ToString(level);
1056 namedParams["internalformat"] = ToString(internalformat);
1057 namedParams["width"] = ToString(width);
1058 namedParams["height"] = ToString(height);
1059 namedParams["border"] = ToString(border);
1060 namedParams["format"] = ToString(format);
1061 namedParams["type"] = ToString(type);
1063 mTextureTrace.PushCall("TexImage2D", out.str(), namedParams);
1066 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
1068 std::stringstream out;
1069 out << target << ", " << pname << ", " << param;
1071 TraceCallStack::NamedParams namedParams;
1072 namedParams["target"] = ToString(target);
1073 namedParams["pname"] = ToString(pname);
1074 namedParams["param"] = ToString(param);
1076 mTexParamaterTrace.PushCall("TexParameterf", out.str(), namedParams);
1079 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
1081 std::stringstream out;
1082 out << target << ", " << pname << ", " << params[0];
1084 TraceCallStack::NamedParams namedParams;
1085 namedParams["target"] = ToString(target);
1086 namedParams["pname"] = ToString(pname);
1087 namedParams["params[0]"] = ToString(params[0]);
1089 mTexParamaterTrace.PushCall("TexParameterfv", out.str(), namedParams);
1092 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
1094 std::stringstream out;
1095 out << target << ", " << pname << ", " << param;
1096 TraceCallStack::NamedParams namedParams;
1097 namedParams["target"] = ToString(target);
1098 namedParams["pname"] = ToString(pname);
1099 namedParams["param"] = ToString(param);
1100 mTexParamaterTrace.PushCall("TexParameteri", out.str(), namedParams);
1103 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
1105 std::stringstream out;
1106 out << target << ", " << pname << ", " << params[0];
1107 TraceCallStack::NamedParams namedParams;
1108 namedParams["target"] = ToString(target);
1109 namedParams["pname"] = ToString(pname);
1110 namedParams["params[0]"] = ToString(params[0]);
1111 mTexParamaterTrace.PushCall("TexParameteriv", out.str(), namedParams);
1114 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
1116 std::stringstream out;
1117 out << target << ", "<<level <<", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
1119 TraceCallStack::NamedParams namedParams;
1120 namedParams["target"] = ToString(target);
1121 namedParams["level"] = ToString(level);
1122 namedParams["xoffset"] = ToString(xoffset);
1123 namedParams["yoffset"] = ToString(yoffset);
1124 namedParams["width"] = ToString(width);
1125 namedParams["height"] = ToString(height);
1126 mTextureTrace.PushCall("TexSubImage2D", out.str(), namedParams);
1129 inline void Uniform1f(GLint location, GLfloat x)
1131 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, x ) )
1133 mGetErrorResult = GL_INVALID_OPERATION;
1137 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
1139 for( int i = 0; i < count; ++i )
1141 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
1143 mGetErrorResult = GL_INVALID_OPERATION;
1149 inline void Uniform1i(GLint location, GLint x)
1151 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
1153 mGetErrorResult = GL_INVALID_OPERATION;
1157 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
1159 for( int i = 0; i < count; ++i )
1161 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
1165 mGetErrorResult = GL_INVALID_OPERATION;
1171 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
1173 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
1177 mGetErrorResult = GL_INVALID_OPERATION;
1181 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
1183 for( int i = 0; i < count; ++i )
1185 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
1187 Vector2( v[2*i], v[2*i+1] ) ) )
1189 mGetErrorResult = GL_INVALID_OPERATION;
1195 inline void Uniform2i(GLint location, GLint x, GLint y)
1199 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
1203 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
1205 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
1207 Vector3( x, y, z ) ) )
1209 mGetErrorResult = GL_INVALID_OPERATION;
1213 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
1215 for( int i = 0; i < count; ++i )
1217 if( ! mProgramUniforms3f.SetUniformValue(
1220 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
1222 mGetErrorResult = GL_INVALID_OPERATION;
1228 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
1232 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
1236 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1238 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
1240 Vector4( x, y, z, w ) ) )
1242 mGetErrorResult = GL_INVALID_OPERATION;
1246 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
1248 for( int i = 0; i < count; ++i )
1250 if( ! mProgramUniforms4f.SetUniformValue(
1253 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
1255 mGetErrorResult = GL_INVALID_OPERATION;
1261 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1265 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
1269 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1273 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1275 for( int i = 0; i < count; ++i )
1277 if( ! mProgramUniformsMat3.SetUniformValue(
1280 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
1282 mGetErrorResult = GL_INVALID_OPERATION;
1288 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1290 for( int i = 0; i < count; ++i )
1292 if( ! mProgramUniformsMat4.SetUniformValue(
1297 mGetErrorResult = GL_INVALID_OPERATION;
1303 inline void UseProgram(GLuint program)
1305 mCurrentProgram = program;
1308 inline void ValidateProgram(GLuint program)
1312 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1316 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1320 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1324 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1328 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1332 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1336 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1340 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1344 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1348 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1354 inline void ReadBuffer(GLenum mode)
1358 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1362 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1366 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)
1370 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1374 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1378 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)
1382 inline void GenQueries(GLsizei n, GLuint* ids)
1386 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1390 inline GLboolean IsQuery(GLuint id)
1395 inline void BeginQuery(GLenum target, GLuint id)
1399 inline void EndQuery(GLenum target)
1403 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1407 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1411 inline GLboolean UnmapBuffer(GLenum target)
1416 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1420 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1424 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1428 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1432 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1436 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1440 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1444 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1448 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1452 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1456 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1460 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1465 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1469 inline void BindVertexArray(GLuint array)
1473 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1477 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1481 inline GLboolean IsVertexArray(GLuint array)
1486 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1490 inline void BeginTransformFeedback(GLenum primitiveMode)
1494 inline void EndTransformFeedback(void)
1498 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1502 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1506 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1510 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1514 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1518 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1522 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1526 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1530 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1534 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1538 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1542 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1546 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1551 inline void Uniform1ui(GLint location, GLuint v0)
1555 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1559 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1563 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1567 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1571 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1575 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1579 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1583 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1587 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1591 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1595 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1599 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1604 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1608 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1612 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1616 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1618 return GL_INVALID_INDEX;
1621 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1625 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1629 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1633 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1637 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1641 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1646 inline GLboolean IsSync(GLsync sync)
1651 inline void DeleteSync(GLsync sync)
1655 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1660 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1664 inline void GetInteger64v(GLenum pname, GLint64* params)
1668 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1672 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1676 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1680 inline void GenSamplers(GLsizei count, GLuint* samplers)
1684 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1688 inline GLboolean IsSampler(GLuint sampler)
1693 inline void BindSampler(GLuint unit, GLuint sampler)
1697 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1701 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1705 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1709 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1713 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1717 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1721 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1725 inline void BindTransformFeedback(GLenum target, GLuint id)
1729 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1733 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1737 inline GLboolean IsTransformFeedback(GLuint id)
1742 inline void PauseTransformFeedback(void)
1746 inline void ResumeTransformFeedback(void)
1750 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1752 mGetProgramBinaryCalled = true;
1755 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1759 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1763 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1767 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1771 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1775 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1779 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1783 public: // TEST FUNCTIONS
1784 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1785 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1786 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1787 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1788 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1789 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1790 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1791 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1792 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1793 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1794 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1795 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1796 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1797 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1798 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1799 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1801 inline bool GetVertexAttribArrayState(GLuint index)
1803 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1808 return mVertexAttribArrayState[ index ];
1810 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1811 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1813 //Methods for CullFace verification
1814 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1815 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1816 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1818 //Methods for Enable/Disable call verification
1819 inline void EnableEnableDisableCallTrace(bool enable) { mEnableDisableTrace.Enable(enable); }
1820 inline void ResetEnableDisableCallStack() { mEnableDisableTrace.Reset(); }
1821 inline TraceCallStack& GetEnableDisableTrace() { return mEnableDisableTrace; }
1823 //Methods for Shader verification
1824 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1825 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1826 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1828 //Methods for Texture verification
1829 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1830 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1831 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1833 //Methods for Texture verification
1834 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1835 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1836 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1838 //Methods for Draw verification
1839 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1840 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1841 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1843 //Methods for Depth function verification
1844 inline void EnableDepthFunctionCallTrace(bool enable) { mDepthFunctionTrace.Enable(enable); }
1845 inline void ResetDepthFunctionCallStack() { mDepthFunctionTrace.Reset(); }
1846 inline TraceCallStack& GetDepthFunctionTrace() { return mDepthFunctionTrace; }
1848 //Methods for Stencil function verification
1849 inline void EnableStencilFunctionCallTrace(bool enable) { mStencilFunctionTrace.Enable(enable); }
1850 inline void ResetStencilFunctionCallStack() { mStencilFunctionTrace.Reset(); }
1851 inline TraceCallStack& GetStencilFunctionTrace() { return mStencilFunctionTrace; }
1853 template <typename T>
1854 inline bool GetUniformValue( const char* name, T& value ) const
1856 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1857 program_it != mUniforms.end();
1860 const UniformIDMap &uniformIDs = program_it->second;
1862 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1863 if( uniform_it != uniformIDs.end() )
1865 // found one matching uniform name, lets check the value...
1866 GLuint programId = program_it->first;
1867 GLint uniformId = uniform_it->second;
1869 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1870 return mProgramUniforms.GetUniformValue( programId, uniformId, value );
1877 template <typename T>
1878 inline bool CheckUniformValue( const char* name, const T& value ) const
1880 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1881 program_it != mUniforms.end();
1884 const UniformIDMap &uniformIDs = program_it->second;
1886 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1887 if( uniform_it != uniformIDs.end() )
1889 // found one matching uniform name, lets check the value...
1890 GLuint programId = program_it->first;
1891 GLint uniformId = uniform_it->second;
1893 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1894 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
1896 // the value matches
1902 fprintf(stderr, "Not found, printing possible values:\n" );
1903 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1904 program_it != mUniforms.end();
1907 const UniformIDMap &uniformIDs = program_it->second;
1909 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1910 if( uniform_it != uniformIDs.end() )
1912 // found one matching uniform name, lets check the value...
1913 GLuint programId = program_it->first;
1914 GLint uniformId = uniform_it->second;
1916 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1918 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
1920 std::stringstream out;
1921 out << uniform_it->first << ": " << origValue;
1922 fprintf(stderr, "%s\n", out.str().c_str() );
1929 template <typename T>
1930 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
1932 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
1933 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
1936 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
1938 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1939 program_it != mUniforms.end();
1942 const UniformIDMap &uniformIDs = program_it->second;
1944 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1945 if( uniform_it != uniformIDs.end() )
1947 programId = program_it->first;
1948 uniformId = uniform_it->second;
1955 inline GLuint GetLastShaderCompiled() const
1957 return mLastShaderCompiled;
1960 inline GLuint GetLastProgramCreated() const
1962 return mLastProgramIdUsed;
1965 inline GLbitfield GetLastClearMask() const
1967 return mLastClearBitMask;
1972 ATTRIB_UNKNOWN = -1,
1977 ATTRIB_BONE_WEIGHTS,
1978 ATTRIB_BONE_INDICES,
1982 struct ScissorParams
1989 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
1992 // Methods to check scissor tests
1993 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
1995 struct ColorMaskParams
2002 ColorMaskParams() : red( true ), green( true ), blue( true ), alpha( true ) { }
2005 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
2007 inline unsigned int GetClearCountCalled() const { return mClearCount; }
2009 inline const ColorMaskParams& GetColorMaskParams() const { return mColorMaskParams; }
2011 typedef std::vector<size_t> BufferDataCalls;
2012 inline const BufferDataCalls& GetBufferDataCalls() const { return mBufferDataCalls; }
2013 inline void ResetBufferDataCalls() { mBufferDataCalls.clear(); }
2015 typedef std::vector<size_t> BufferSubDataCalls;
2016 inline const BufferSubDataCalls& GetBufferSubDataCalls() const { return mBufferSubDataCalls; }
2017 inline void ResetBufferSubDataCalls() { mBufferSubDataCalls.clear(); }
2020 GLuint mCurrentProgram;
2021 GLuint mCompileStatus;
2022 BufferDataCalls mBufferDataCalls;
2023 BufferSubDataCalls mBufferSubDataCalls;
2025 GLint mNumberOfActiveUniforms;
2026 GLint mGetAttribLocationResult;
2027 GLenum mGetErrorResult;
2028 GLubyte* mGetStringResult;
2029 GLboolean mIsBufferResult;
2030 GLboolean mIsEnabledResult;
2031 GLboolean mIsFramebufferResult;
2032 GLboolean mIsProgramResult;
2033 GLboolean mIsRenderbufferResult;
2034 GLboolean mIsShaderResult;
2035 GLboolean mIsTextureResult;
2036 GLenum mActiveTextureUnit;
2037 GLenum mCheckFramebufferStatusResult;
2038 GLint mFramebufferStatus;
2039 GLenum mFramebufferColorAttached;
2040 GLenum mFramebufferDepthAttached;
2041 GLenum mFramebufferStencilAttached;
2042 GLint mNumBinaryFormats;
2043 GLint mBinaryFormats;
2044 GLint mProgramBinaryLength;
2045 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
2046 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
2047 bool mGetProgramBinaryCalled;
2048 typedef std::map< GLuint, std::string> ShaderSourceMap;
2049 ShaderSourceMap mShaderSources;
2050 GLuint mLastShaderCompiled;
2051 GLbitfield mLastClearBitMask;
2052 unsigned int mClearCount;
2054 Vector4 mLastBlendColor;
2055 GLenum mLastBlendEquationRgb;
2056 GLenum mLastBlendEquationAlpha;
2057 GLenum mLastBlendFuncSrcRgb;
2058 GLenum mLastBlendFuncDstRgb;
2059 GLenum mLastBlendFuncSrcAlpha;
2060 GLenum mLastBlendFuncDstAlpha;
2062 // Data for manipulating the IDs returned by GenTextures
2063 GLuint mLastAutoTextureIdUsed;
2064 std::vector<GLuint> mNextTextureIds;
2065 std::vector<GLuint> mDeletedTextureIds;
2066 std::vector<GLuint> mBoundTextures;
2068 struct ActiveTextureType
2070 std::vector<GLuint> mBoundTextures;
2073 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
2075 TraceCallStack mCullFaceTrace;
2076 TraceCallStack mEnableDisableTrace;
2077 TraceCallStack mShaderTrace;
2078 TraceCallStack mTextureTrace;
2079 TraceCallStack mTexParamaterTrace;
2080 TraceCallStack mDrawTrace;
2081 TraceCallStack mDepthFunctionTrace;
2082 TraceCallStack mStencilFunctionTrace;
2084 // Shaders & Uniforms
2085 GLuint mLastShaderIdUsed;
2086 GLuint mLastProgramIdUsed;
2087 GLuint mLastUniformIdUsed;
2088 typedef std::map< std::string, GLint > UniformIDMap;
2089 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
2090 ProgramUniformMap mUniforms;
2092 template <typename T>
2093 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
2096 typedef std::map< GLint, T > UniformValueMap;
2097 typedef std::map< GLuint, UniformValueMap > Map;
2099 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
2106 typename Map::iterator it = Map::find( program );
2107 if( it == Map::end() )
2109 // if its the first uniform for this program add it
2110 std::pair< typename Map::iterator, bool > result =
2111 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
2115 UniformValueMap& uniforms = it->second;
2116 uniforms[uniform] = value;
2121 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
2124 if ( GetUniformValue( program, uniform, uniformValue ) )
2126 return value == uniformValue;
2132 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
2139 typename Map::const_iterator it = Map::find( program );
2140 if( it == Map::end() )
2142 // Uniform values always initialised as 0
2147 const UniformValueMap& uniforms = it->second;
2148 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
2149 if( it2 == uniforms.end() )
2151 // Uniform values always initialised as 0
2155 value = it2->second;
2162 ProgramUniformValue<int> mProgramUniforms1i;
2163 ProgramUniformValue<float> mProgramUniforms1f;
2164 ProgramUniformValue<Vector2> mProgramUniforms2f;
2165 ProgramUniformValue<Vector3> mProgramUniforms3f;
2166 ProgramUniformValue<Vector4> mProgramUniforms4f;
2167 ProgramUniformValue<Matrix> mProgramUniformsMat4;
2168 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
2170 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
2172 return mProgramUniforms1i;
2174 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
2176 return mProgramUniforms1f;
2178 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
2180 return mProgramUniforms2f;
2182 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
2184 return mProgramUniforms3f;
2186 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
2188 return mProgramUniforms4f;
2190 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
2192 return mProgramUniformsMat4;
2194 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
2196 return mProgramUniformsMat3;
2198 inline void SetVertexAttribArray(GLuint index, bool state)
2200 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
2205 mVertexAttribArrayState[ index ] = state;
2206 mVertexAttribArrayChanged = true;
2209 ScissorParams mScissorParams;
2210 ColorMaskParams mColorMaskParams;
2214 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
2220 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
2226 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
2228 return Vector2::ZERO;
2232 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
2234 return Vector3::ZERO;
2238 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
2240 return Vector4::ZERO;
2244 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
2250 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
2252 return Matrix3( Matrix() );
2257 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2258 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2263 #endif // __TEST_GL_ES_H__