1 #ifndef TEST_GL_ABSTRACTION_H
2 #define TEST_GL_ABSTRACTION_H
5 * Copyright (c) 2017 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
31 #include <dali/public-api/dali-core.h>
32 #include <dali/integration-api/core.h>
33 #include <dali/integration-api/gl-abstraction.h>
34 #include <dali/integration-api/gl-defines.h>
35 #include <test-trace-call-stack.h>
36 #include <test-compare-types.h>
41 static const unsigned int MAX_ATTRIBUTE_CACHE_SIZE = 64;
42 static const char *mStdAttribs[MAX_ATTRIBUTE_CACHE_SIZE] =
44 "aPosition", // ATTRIB_POSITION
45 "aNormal", // ATTRIB_NORMAL
46 "aTexCoord", // ATTRIB_TEXCOORD
47 "aColor", // ATTRIB_COLOR
48 "aBoneWeights", // ATTRIB_BONE_WEIGHTS
49 "aBoneIndices" // ATTRIB_BONE_INDICES
52 class DALI_IMPORT_API TestGlAbstraction: public Dali::Integration::GlAbstraction
64 inline void ActiveTexture( GLenum textureUnit )
66 mActiveTextureUnit = textureUnit - GL_TEXTURE0;
69 inline GLenum GetActiveTextureUnit() const
71 return mActiveTextureUnit + GL_TEXTURE0;
74 inline void AttachShader( GLuint program, GLuint shader )
76 std::stringstream out;
77 out << program << ", " << shader;
79 TraceCallStack::NamedParams namedParams;
80 namedParams["program"] = ToString(program);
81 namedParams["shader"] = ToString(shader);
82 mShaderTrace.PushCall("AttachShader", out.str(), namedParams);
85 inline void BindAttribLocation( GLuint program, GLuint index, const char* name )
89 inline void BindBuffer( GLenum target, GLuint buffer )
93 inline void BindFramebuffer( GLenum target, GLuint framebuffer )
96 mFramebufferStatus |= 2;
99 inline void BindRenderbuffer( GLenum target, GLuint renderbuffer )
104 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
105 * @return A vector containing the IDs that were bound.
107 inline const std::vector<GLuint>& GetBoundTextures() const
109 return mBoundTextures;
113 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
114 * @param[in] activeTextureUnit The specific active texture unit.
115 * @return A vector containing the IDs that were bound.
117 inline const std::vector<GLuint>& GetBoundTextures( GLuint activeTextureUnit ) const
119 return mActiveTextures[ activeTextureUnit - GL_TEXTURE0 ].mBoundTextures;
123 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
125 inline void ClearBoundTextures()
127 mBoundTextures.clear();
129 for( unsigned int i=0; i<MIN_TEXTURE_UNIT_LIMIT; ++i )
131 mActiveTextures[ i ].mBoundTextures.clear();
135 inline void BindTexture( GLenum target, GLuint texture )
137 // Record the bound textures for future checks
140 mBoundTextures.push_back( texture );
142 if( mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT )
144 mActiveTextures[ mActiveTextureUnit ].mBoundTextures.push_back( texture );
148 std::stringstream out;
149 out << target << ", " << texture;
151 TraceCallStack::NamedParams namedParams;
152 namedParams["target"] = ToString(target);
153 namedParams["texture"] = ToString(texture);
155 mTextureTrace.PushCall("BindTexture", out.str(), namedParams);
158 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
160 mLastBlendColor.r = red;
161 mLastBlendColor.g = green;
162 mLastBlendColor.b = blue;
163 mLastBlendColor.a = alpha;
166 inline const Vector4& GetLastBlendColor() const
168 return mLastBlendColor;
171 inline void BlendEquation( GLenum mode )
173 mLastBlendEquationRgb = mode;
174 mLastBlendEquationAlpha = mode;
177 inline void BlendEquationSeparate( GLenum modeRgb, GLenum modeAlpha )
179 mLastBlendEquationRgb = modeRgb;
180 mLastBlendEquationAlpha = modeAlpha;
183 inline GLenum GetLastBlendEquationRgb() const
185 return mLastBlendEquationRgb;
188 inline GLenum GetLastBlendEquationAlpha() const
190 return mLastBlendEquationAlpha;
193 inline void BlendFunc(GLenum sfactor, GLenum dfactor)
195 mLastBlendFuncSrcRgb = sfactor;
196 mLastBlendFuncDstRgb = dfactor;
197 mLastBlendFuncSrcAlpha = sfactor;
198 mLastBlendFuncDstAlpha = dfactor;
201 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
203 mLastBlendFuncSrcRgb = srcRGB;
204 mLastBlendFuncDstRgb = dstRGB;
205 mLastBlendFuncSrcAlpha = srcAlpha;
206 mLastBlendFuncDstAlpha = dstAlpha;
209 inline GLenum GetLastBlendFuncSrcRgb() const
211 return mLastBlendFuncSrcRgb;
214 inline GLenum GetLastBlendFuncDstRgb() const
216 return mLastBlendFuncDstRgb;
219 inline GLenum GetLastBlendFuncSrcAlpha() const
221 return mLastBlendFuncSrcAlpha;
224 inline GLenum GetLastBlendFuncDstAlpha() const
226 return mLastBlendFuncDstAlpha;
229 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage)
231 mBufferDataCalls.push_back(size);
234 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data)
236 mBufferSubDataCalls.push_back(size);
239 inline GLenum CheckFramebufferStatus(GLenum target)
241 //If it has the three last bits set to 1 - 111, then the three minimum functions to create a
242 //Framebuffer texture have been called
243 if( mFramebufferStatus == 7 )
245 return GL_FRAMEBUFFER_COMPLETE;
248 return mCheckFramebufferStatusResult;
251 inline GLenum CheckFramebufferColorAttachment()
253 return mFramebufferColorAttached;
256 inline GLenum CheckFramebufferDepthAttachment()
258 return mFramebufferDepthAttached;
261 inline GLenum CheckFramebufferStencilAttachment()
263 return mFramebufferStencilAttached;
266 inline void Clear(GLbitfield mask)
269 mLastClearBitMask = mask;
272 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
276 inline void ClearDepthf(GLclampf depth)
280 inline void ClearStencil(GLint s)
282 std::stringstream out;
285 TraceCallStack::NamedParams namedParams;
286 namedParams["s"] = ToString( s );
288 mStencilFunctionTrace.PushCall( "ClearStencil", out.str(), namedParams );
291 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
293 mColorMaskParams.red = red;
294 mColorMaskParams.green = green;
295 mColorMaskParams.blue = blue;
296 mColorMaskParams.alpha = alpha;
299 inline void CompileShader(GLuint shader)
301 std::stringstream out;
303 TraceCallStack::NamedParams namedParams;
304 namedParams["shader"] = ToString(shader);
306 mShaderTrace.PushCall("CompileShader", out.str(), namedParams);
309 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
311 std::stringstream out;
312 out << target<<", "<<level<<", "<<width << ", " << height;
314 TraceCallStack::NamedParams namedParams;
315 namedParams["target"] = ToString(target);
316 namedParams["level"] = ToString(level);
317 namedParams["internalformat"] = ToString(internalformat);
318 namedParams["width"] = ToString(width);
319 namedParams["height"] = ToString(height);
320 namedParams["border"] = ToString(border);
321 namedParams["size"] = ToString(imageSize);
323 mTextureTrace.PushCall("CompressedTexImage2D", out.str(), namedParams);
326 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)
328 std::stringstream out;
329 out << target << ", "<<level <<", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
331 TraceCallStack::NamedParams namedParams;
332 namedParams["target"] = ToString(target);
333 namedParams["level"] = ToString(level);
334 namedParams["xoffset"] = ToString(xoffset);
335 namedParams["yoffset"] = ToString(yoffset);
336 namedParams["width"] = ToString(width);
337 namedParams["height"] = ToString(height);
338 mTextureTrace.PushCall("CompressedTexSubImage2D", out.str(), namedParams);
341 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
345 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
349 inline GLuint CreateProgram(void)
351 mShaderTrace.PushCall("CreateProgram", "");
353 ++mLastProgramIdUsed;
354 mUniforms[mLastProgramIdUsed] = UniformIDMap();
355 return mLastProgramIdUsed;
358 inline GLuint CreateShader(GLenum type)
360 std::stringstream out;
363 TraceCallStack::NamedParams namedParams;
364 namedParams["type"] = ToString(type);
365 mShaderTrace.PushCall("CreateShader", out.str(), namedParams);
367 return ++mLastShaderIdUsed;
370 inline void CullFace(GLenum mode)
372 std::stringstream out;
375 TraceCallStack::NamedParams namedParams;
376 namedParams["program"] = ToString(mode);
378 mCullFaceTrace.PushCall("CullFace", out.str(), namedParams);
381 inline void DeleteBuffers(GLsizei n, const GLuint* buffers)
385 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
389 inline void DeleteProgram(GLuint program)
391 std::stringstream out;
394 TraceCallStack::NamedParams namedParams;
395 namedParams["program"] = ToString(program);
397 mShaderTrace.PushCall("DeleteProgram", out.str(), namedParams);
400 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
404 inline void DeleteShader(GLuint shader)
406 std::stringstream out;
409 TraceCallStack::NamedParams namedParams;
410 namedParams["shader"] = ToString(shader);
412 mShaderTrace.PushCall("DeleteShader", out.str(), namedParams);
415 inline void DeleteTextures(GLsizei n, const GLuint* textures)
417 std::stringstream out;
418 out << n << ", " << textures << " = [";
420 TraceCallStack::NamedParams namedParams;
422 for(GLsizei i=0; i<n; i++)
424 out << textures[i] << ", ";
425 std::stringstream paramName;
426 paramName<<"texture["<<i<<"]";
427 namedParams[paramName.str()] = ToString(textures[i]);
428 mDeletedTextureIds.push_back(textures[i]);
429 mNumGeneratedTextures--;
433 mTextureTrace.PushCall("DeleteTextures", out.str(), namedParams);
436 inline bool CheckNoTexturesDeleted()
438 return mDeletedTextureIds.size() == 0;
441 inline bool CheckTextureDeleted( GLuint textureId )
445 for(std::vector<GLuint>::iterator iter=mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
447 if(*iter == textureId)
456 inline void ClearDeletedTextures()
458 mDeletedTextureIds.clear();
461 inline void DepthFunc(GLenum func)
463 std::stringstream out;
466 TraceCallStack::NamedParams namedParams;
467 namedParams["func"] = ToString(func);
469 mDepthFunctionTrace.PushCall("DepthFunc", out.str(), namedParams);
472 inline void DepthMask(GLboolean flag)
474 mLastDepthMask = flag;
477 inline bool GetLastDepthMask() const
479 return mLastDepthMask;
482 inline void DepthRangef(GLclampf zNear, GLclampf zFar)
486 inline void DetachShader(GLuint program, GLuint shader)
488 std::stringstream out;
489 out << program << ", " << shader;
490 TraceCallStack::NamedParams namedParams;
491 namedParams["program"] = ToString(program);
492 namedParams["shader"] = ToString(shader);
493 mShaderTrace.PushCall("DetachShader", out.str(), namedParams);
496 inline void Disable(GLenum cap)
498 std::stringstream out;
500 TraceCallStack::NamedParams namedParams;
501 namedParams["cap"] = ToString(cap);
502 mEnableDisableTrace.PushCall("Disable", out.str(), namedParams);
505 inline void DisableVertexAttribArray(GLuint index)
507 SetVertexAttribArray( index, false );
510 inline void DrawArrays(GLenum mode, GLint first, GLsizei count)
512 std::stringstream out;
513 out << mode << ", " << first << ", " << count;
514 TraceCallStack::NamedParams namedParams;
515 namedParams["mode"] = ToString(mode);
516 namedParams["first"] = ToString(first);
517 namedParams["count"] = ToString(count);
518 mDrawTrace.PushCall("DrawArrays", out.str(), namedParams);
521 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
523 std::stringstream out;
524 out << mode << ", " << count << ", " << type << ", indices";
526 TraceCallStack::NamedParams namedParams;
527 namedParams["mode"] = ToString(mode);
528 namedParams["count"] = ToString(count);
529 namedParams["type"] = ToString(type);
530 // Skip void pointers - are they of any use?
531 mDrawTrace.PushCall("DrawElements", out.str(), namedParams);
534 inline void Enable(GLenum cap)
536 std::stringstream out;
538 TraceCallStack::NamedParams namedParams;
539 namedParams["cap"] = ToString(cap);
540 mEnableDisableTrace.PushCall("Enable", out.str(), namedParams);
543 inline void EnableVertexAttribArray(GLuint index)
545 SetVertexAttribArray( index, true);
548 inline void Finish(void)
552 inline void Flush(void)
556 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
558 if (attachment == GL_DEPTH_ATTACHMENT)
560 mFramebufferDepthAttached = true;
562 else if (attachment == GL_STENCIL_ATTACHMENT)
564 mFramebufferStencilAttached = true;
568 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
571 mFramebufferStatus |= 4;
573 //We check 4 attachment colors
574 if ((attachment == GL_COLOR_ATTACHMENT0) || (attachment == GL_COLOR_ATTACHMENT1) || (attachment == GL_COLOR_ATTACHMENT2) || (attachment == GL_COLOR_ATTACHMENT4))
576 mFramebufferColorAttached = true;
580 inline void FrontFace(GLenum mode)
584 inline void GenBuffers(GLsizei n, GLuint* buffers)
586 // avoids an assert in GpuBuffers
590 inline void GenerateMipmap(GLenum target)
592 std::stringstream out;
594 TraceCallStack::NamedParams namedParams;
595 namedParams["target"] = ToString(target);
597 mTextureTrace.PushCall("GenerateMipmap", out.str(), namedParams);
600 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers)
602 for( int i = 0; i < n; i++ )
604 framebuffers[i] = i + 1;
607 //Add 001 bit, this function needs to be called the first one in the chain
608 mFramebufferStatus = 1;
611 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
613 for( int i = 0; i < n; i++ )
615 renderbuffers[i] = i + 1;
620 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
621 * @param[in] ids A vector containing the next IDs to be generated
623 inline void SetNextTextureIds( const std::vector<GLuint>& ids )
625 mNextTextureIds = ids;
628 inline const std::vector<GLuint>& GetNextTextureIds()
630 return mNextTextureIds;
633 inline void GenTextures(GLsizei count, GLuint* textures)
635 for( int i=0; i<count; ++i )
637 if( !mNextTextureIds.empty() )
639 *(textures+i) = mNextTextureIds[0];
640 mNextTextureIds.erase( mNextTextureIds.begin() );
644 *(textures+i) = ++mLastAutoTextureIdUsed;
646 mNumGeneratedTextures++;
649 TraceCallStack::NamedParams namedParams;
650 namedParams["count"] = ToString(count);
652 std::stringstream out;
653 for(int i=0; i<count; i++)
660 std::ostringstream oss;
661 oss<<"indices["<<i<<"]";
662 namedParams[oss.str()] = ToString(textures[i]);
665 mTextureTrace.PushCall("GenTextures", out.str(), namedParams);
668 inline GLuint GetLastGenTextureId()
670 return mLastAutoTextureIdUsed;
672 inline GLuint GetNumGeneratedTextures()
674 return mNumGeneratedTextures;
677 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
681 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)
686 *length = snprintf(name, bufsize, "sTexture");
687 *type = GL_SAMPLER_2D;
691 *length = snprintf(name, bufsize, "sEffect");
692 *type = GL_SAMPLER_2D;
696 *length = snprintf(name, bufsize, "sGloss");
697 *type = GL_SAMPLER_2D;
705 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
709 inline int GetAttribLocation(GLuint program, const char* name)
711 std::string attribName(name);
713 for( unsigned int i = 0; i < ATTRIB_TYPE_LAST; ++i )
715 if( mStdAttribs[i] == attribName )
721 // 0 is a valid location
725 inline void GetBooleanv(GLenum pname, GLboolean* params)
729 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
733 inline GLenum GetError(void)
735 return mGetErrorResult;
738 inline void GetFloatv(GLenum pname, GLfloat* params)
742 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
746 inline void GetIntegerv(GLenum pname, GLint* params)
750 case GL_MAX_TEXTURE_SIZE:
753 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
756 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
757 *params = mNumBinaryFormats;
759 case GL_PROGRAM_BINARY_FORMATS_OES:
760 *params = mBinaryFormats;
765 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params)
770 *params = mLinkStatus;
772 case GL_PROGRAM_BINARY_LENGTH_OES:
773 *params = mProgramBinaryLength;
775 case GL_ACTIVE_UNIFORMS:
776 *params = mNumberOfActiveUniforms;
778 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
784 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)
788 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
792 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
795 case GL_COMPILE_STATUS:
796 *params = mCompileStatus;
801 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)
805 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
809 inline const GLubyte* GetString(GLenum name)
811 return mGetStringResult;
814 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
818 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
822 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params)
826 inline void GetUniformiv(GLuint program, GLint location, GLint* params)
830 inline GLint GetUniformLocation(GLuint program, const char* name)
832 ProgramUniformMap::iterator it = mUniforms.find(program);
833 if( it == mUniforms.end() )
835 // Not a valid program ID
836 mGetErrorResult = GL_INVALID_OPERATION;
840 UniformIDMap& uniformIDs = it->second;
841 UniformIDMap::iterator it2 = uniformIDs.find( name );
842 if( it2 == uniformIDs.end() )
844 // Uniform not found, so add it...
845 uniformIDs[name] = ++mLastUniformIdUsed;
846 return mLastUniformIdUsed;
852 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
856 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
860 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer)
864 inline void Hint(GLenum target, GLenum mode)
868 inline GLboolean IsBuffer(GLuint buffer)
870 return mIsBufferResult;
873 inline GLboolean IsEnabled(GLenum cap)
875 return mIsEnabledResult;
878 inline GLboolean IsFramebuffer(GLuint framebuffer)
880 return mIsFramebufferResult;
883 inline GLboolean IsProgram(GLuint program)
885 return mIsProgramResult;
888 inline GLboolean IsRenderbuffer(GLuint renderbuffer)
890 return mIsRenderbufferResult;
893 inline GLboolean IsShader(GLuint shader)
895 return mIsShaderResult;
898 inline GLboolean IsTexture(GLuint texture)
900 return mIsTextureResult;
903 inline void LineWidth(GLfloat width)
907 inline void LinkProgram(GLuint program)
909 std::stringstream out;
912 TraceCallStack::NamedParams namedParams;
913 namedParams["program"] = ToString(program);
914 mShaderTrace.PushCall("LinkProgram", out.str(), namedParams);
916 mNumberOfActiveUniforms=3;
917 GetUniformLocation(program, "sTexture");
918 GetUniformLocation(program, "sEffect");
919 GetUniformLocation(program, "sGloss");
922 inline void PixelStorei(GLenum pname, GLint param)
926 inline void PolygonOffset(GLfloat factor, GLfloat units)
930 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels)
934 inline void ReleaseShaderCompiler(void)
938 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
942 inline void SampleCoverage(GLclampf value, GLboolean invert)
946 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
948 mScissorParams.x = x;
949 mScissorParams.y = y;
950 mScissorParams.width = width;
951 mScissorParams.height = height;
954 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
958 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length)
960 std::string stringBuilder;
961 for(int i = 0; i < count; ++i)
963 stringBuilder += string[i];
965 mShaderSources[shader] = stringBuilder;
966 mLastShaderCompiled = shader;
969 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source)
971 const std::string shaderSource = mShaderSources[shader];
972 const int shaderSourceLength = static_cast<int>(shaderSource.length());
973 if( shaderSourceLength < bufsize )
975 strncpy( source, shaderSource.c_str(), shaderSourceLength );
976 *length = shaderSourceLength;
980 *length = bufsize -1;
981 strncpy(source, shaderSource.c_str(), *length);
982 source[*length] = 0x0;
986 inline std::string GetShaderSource(GLuint shader)
988 return mShaderSources[shader];
991 inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
993 std::stringstream out;
994 out << func << ", " << ref << ", " << mask;
996 TraceCallStack::NamedParams namedParams;
997 namedParams["func"] = ToString( func );
998 namedParams["ref"] = ToString( ref );
999 namedParams["mask"] = ToString( mask );
1001 mStencilFunctionTrace.PushCall( "StencilFunc", out.str(), namedParams );
1004 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
1006 std::stringstream out;
1007 out << face << ", " << func << ", " << ref << ", " << mask;
1009 TraceCallStack::NamedParams namedParams;
1010 namedParams["face"] = ToString( face );
1011 namedParams["func"] = ToString( func );
1012 namedParams["ref"] = ToString( ref );
1013 namedParams["mask"] = ToString( mask );
1015 mStencilFunctionTrace.PushCall( "StencilFuncSeparate", out.str(), namedParams );
1018 inline void StencilMask(GLuint mask)
1020 std::stringstream out;
1023 TraceCallStack::NamedParams namedParams;
1024 namedParams["mask"] = ToString( mask );
1026 mStencilFunctionTrace.PushCall( "StencilMask", out.str(), namedParams );
1029 inline void StencilMaskSeparate(GLenum face, GLuint mask)
1031 std::stringstream out;
1032 out << face << ", " << mask;
1034 TraceCallStack::NamedParams namedParams;
1035 namedParams["face"] = ToString( face );
1036 namedParams["mask"] = ToString( mask );
1038 mStencilFunctionTrace.PushCall( "StencilMaskSeparate", out.str(), namedParams );
1041 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
1043 std::stringstream out;
1044 out << fail << ", " << zfail << ", " << zpass;
1046 TraceCallStack::NamedParams namedParams;
1047 namedParams["fail"] = ToString( fail );
1048 namedParams["zfail"] = ToString( zfail );
1049 namedParams["zpass"] = ToString( zpass );
1051 mStencilFunctionTrace.PushCall( "StencilOp", out.str(), namedParams );
1054 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
1056 std::stringstream out;
1057 out << face << ", " << fail << ", " << zfail << "," << zpass;
1059 TraceCallStack::NamedParams namedParams;
1060 namedParams["face"] = ToString( face );
1061 namedParams["fail"] = ToString( fail );
1062 namedParams["zfail"] = ToString( zfail );
1063 namedParams["zpass"] = ToString( zpass );
1065 mStencilFunctionTrace.PushCall( "StencilOpSeparate", out.str(), namedParams );
1068 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
1070 std::stringstream out;
1071 out << target<<", "<<level<<", "<<width << ", " << height;
1073 TraceCallStack::NamedParams namedParams;
1074 namedParams["target"] = ToString(target);
1075 namedParams["level"] = ToString(level);
1076 namedParams["internalformat"] = ToString(internalformat);
1077 namedParams["width"] = ToString(width);
1078 namedParams["height"] = ToString(height);
1079 namedParams["border"] = ToString(border);
1080 namedParams["format"] = ToString(format);
1081 namedParams["type"] = ToString(type);
1083 mTextureTrace.PushCall("TexImage2D", out.str(), namedParams);
1086 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param)
1088 std::stringstream out;
1089 out << target << ", " << pname << ", " << param;
1091 TraceCallStack::NamedParams namedParams;
1092 namedParams["target"] = ToString(target);
1093 namedParams["pname"] = ToString(pname);
1094 namedParams["param"] = ToString(param);
1096 mTexParamaterTrace.PushCall("TexParameterf", out.str(), namedParams);
1099 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
1101 std::stringstream out;
1102 out << target << ", " << pname << ", " << params[0];
1104 TraceCallStack::NamedParams namedParams;
1105 namedParams["target"] = ToString(target);
1106 namedParams["pname"] = ToString(pname);
1107 namedParams["params[0]"] = ToString(params[0]);
1109 mTexParamaterTrace.PushCall("TexParameterfv", out.str(), namedParams);
1112 inline void TexParameteri(GLenum target, GLenum pname, GLint param)
1114 std::stringstream out;
1115 out << target << ", " << pname << ", " << param;
1116 TraceCallStack::NamedParams namedParams;
1117 namedParams["target"] = ToString(target);
1118 namedParams["pname"] = ToString(pname);
1119 namedParams["param"] = ToString(param);
1120 mTexParamaterTrace.PushCall("TexParameteri", out.str(), namedParams);
1123 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
1125 std::stringstream out;
1126 out << target << ", " << pname << ", " << params[0];
1127 TraceCallStack::NamedParams namedParams;
1128 namedParams["target"] = ToString(target);
1129 namedParams["pname"] = ToString(pname);
1130 namedParams["params[0]"] = ToString(params[0]);
1131 mTexParamaterTrace.PushCall("TexParameteriv", out.str(), namedParams);
1134 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
1136 std::stringstream out;
1137 out << target << ", "<<level <<", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
1139 TraceCallStack::NamedParams namedParams;
1140 namedParams["target"] = ToString(target);
1141 namedParams["level"] = ToString(level);
1142 namedParams["xoffset"] = ToString(xoffset);
1143 namedParams["yoffset"] = ToString(yoffset);
1144 namedParams["width"] = ToString(width);
1145 namedParams["height"] = ToString(height);
1146 mTextureTrace.PushCall("TexSubImage2D", out.str(), namedParams);
1149 inline void Uniform1f(GLint location, GLfloat value )
1151 std::string params = ToString( value );
1152 AddUniformCallToTraceStack( location, params );
1154 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, value ) )
1156 mGetErrorResult = GL_INVALID_OPERATION;
1160 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
1163 for( int i = 0; i < count; ++i )
1165 params = params + ToString( v[i] ) + ",";
1168 AddUniformCallToTraceStack( location, params );
1170 for( int i = 0; i < count; ++i )
1172 if( ! mProgramUniforms1f.SetUniformValue( mCurrentProgram, location, v[i] ) )
1174 mGetErrorResult = GL_INVALID_OPERATION;
1180 inline void Uniform1i(GLint location, GLint x)
1182 std::string params = ToString( x );
1184 AddUniformCallToTraceStack( location, params );
1186 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram, location, x ) )
1188 mGetErrorResult = GL_INVALID_OPERATION;
1192 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v)
1194 std::string params = ToString( v );
1195 AddUniformCallToTraceStack( location, params );
1197 for( int i = 0; i < count; ++i )
1199 if( ! mProgramUniforms1i.SetUniformValue( mCurrentProgram,
1203 mGetErrorResult = GL_INVALID_OPERATION;
1209 inline void Uniform2f(GLint location, GLfloat x, GLfloat y)
1211 std::string params = ToString( x ) + "," + ToString( y );
1212 AddUniformCallToTraceStack( location, params );
1214 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
1218 mGetErrorResult = GL_INVALID_OPERATION;
1222 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
1224 std::string params = ToString( v );
1225 AddUniformCallToTraceStack( location, params );
1227 for( int i = 0; i < count; ++i )
1229 if( ! mProgramUniforms2f.SetUniformValue( mCurrentProgram,
1231 Vector2( v[2*i], v[2*i+1] ) ) )
1233 mGetErrorResult = GL_INVALID_OPERATION;
1239 inline void Uniform2i(GLint location, GLint x, GLint y)
1241 std::string params = ToString( x ) + "," + ToString( y );
1242 AddUniformCallToTraceStack( location, params );
1245 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v)
1247 std::string params = ToString( v );
1248 AddUniformCallToTraceStack( location, params );
1251 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
1253 std::string params = ToString( x ) + "," + ToString( y ) + "," + ToString( z );
1254 AddUniformCallToTraceStack( location, params );
1256 if( ! mProgramUniforms3f.SetUniformValue( mCurrentProgram,
1258 Vector3( x, y, z ) ) )
1260 mGetErrorResult = GL_INVALID_OPERATION;
1264 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
1266 std::string params = ToString( v );
1267 AddUniformCallToTraceStack( location, params );
1269 for( int i = 0; i < count; ++i )
1271 if( ! mProgramUniforms3f.SetUniformValue(
1274 Vector3( v[3*i], v[3*i+1], v[3*i+2] ) ) )
1276 mGetErrorResult = GL_INVALID_OPERATION;
1282 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z)
1284 std::string params = ToString( x ) + "," + ToString( y ) + "," + ToString( z );
1285 AddUniformCallToTraceStack( location, params );
1288 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v)
1290 std::string params = ToString( v );
1291 AddUniformCallToTraceStack( location, params );
1294 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1296 std::string params = ToString( x ) + "," + ToString( y ) + "," + ToString( z ) + "," + ToString( w );
1297 AddUniformCallToTraceStack( location, params );
1299 if( ! mProgramUniforms4f.SetUniformValue( mCurrentProgram,
1301 Vector4( x, y, z, w ) ) )
1303 mGetErrorResult = GL_INVALID_OPERATION;
1307 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
1309 std::string params = ToString( v );
1310 AddUniformCallToTraceStack( location, params );
1312 for( int i = 0; i < count; ++i )
1314 if( ! mProgramUniforms4f.SetUniformValue(
1317 Vector4( v[4*i], v[4*i+1], v[4*i+2], v[4*i+3] ) ) )
1319 mGetErrorResult = GL_INVALID_OPERATION;
1325 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
1327 std::string params = ToString( x ) + "," + ToString( y ) + "," + ToString( z ) + "," + ToString( w );
1328 AddUniformCallToTraceStack( location, params );
1331 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v)
1333 std::string params = ToString( v );
1334 AddUniformCallToTraceStack( location, params );
1337 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1339 std::string params = ToString( value );
1340 AddUniformCallToTraceStack( location, params );
1343 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1345 std::string params = ToString( value );
1346 AddUniformCallToTraceStack( location, params );
1348 for( int i = 0; i < count; ++i )
1350 if( ! mProgramUniformsMat3.SetUniformValue(
1353 Matrix3( value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8] ) ) )
1355 mGetErrorResult = GL_INVALID_OPERATION;
1361 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1363 std::string params = ToString( value );
1364 AddUniformCallToTraceStack( location, params );
1366 for( int i = 0; i < count; ++i )
1368 if( ! mProgramUniformsMat4.SetUniformValue(
1373 mGetErrorResult = GL_INVALID_OPERATION;
1379 inline void UseProgram(GLuint program)
1381 mCurrentProgram = program;
1384 inline void ValidateProgram(GLuint program)
1388 inline void VertexAttrib1f(GLuint indx, GLfloat x)
1392 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values)
1396 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
1400 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values)
1404 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
1408 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values)
1412 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
1416 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values)
1420 inline void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)
1424 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
1430 inline void ReadBuffer(GLenum mode)
1434 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
1438 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
1442 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)
1446 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
1450 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
1454 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)
1458 inline void GenQueries(GLsizei n, GLuint* ids)
1462 inline void DeleteQueries(GLsizei n, const GLuint* ids)
1466 inline GLboolean IsQuery(GLuint id)
1471 inline void BeginQuery(GLenum target, GLuint id)
1475 inline void EndQuery(GLenum target)
1479 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params)
1483 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
1487 inline GLboolean UnmapBuffer(GLenum target)
1492 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
1496 inline void DrawBuffers(GLsizei n, const GLenum* bufs)
1500 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1504 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1508 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1512 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1516 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1520 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
1524 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
1528 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
1532 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
1536 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
1541 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
1545 inline void BindVertexArray(GLuint array)
1549 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays)
1553 inline void GenVertexArrays(GLsizei n, GLuint* arrays)
1557 inline GLboolean IsVertexArray(GLuint array)
1562 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data)
1566 inline void BeginTransformFeedback(GLenum primitiveMode)
1570 inline void EndTransformFeedback(void)
1574 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
1578 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
1582 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
1586 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
1590 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
1594 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
1598 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
1602 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
1606 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
1610 inline void VertexAttribI4iv(GLuint index, const GLint* v)
1614 inline void VertexAttribI4uiv(GLuint index, const GLuint* v)
1618 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params)
1622 inline GLint GetFragDataLocation(GLuint program, const GLchar *name)
1627 inline void Uniform1ui(GLint location, GLuint v0)
1631 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1)
1635 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
1639 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
1643 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
1647 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
1651 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
1655 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
1659 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
1663 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
1667 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
1671 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
1675 inline const GLubyte* GetStringi(GLenum name, GLuint index)
1680 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
1684 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
1688 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
1692 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
1694 return GL_INVALID_INDEX;
1697 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
1701 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
1705 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1709 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
1713 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
1717 inline GLsync FenceSync(GLenum condition, GLbitfield flags)
1722 inline GLboolean IsSync(GLsync sync)
1727 inline void DeleteSync(GLsync sync)
1731 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1736 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
1740 inline void GetInteger64v(GLenum pname, GLint64* params)
1744 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
1748 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
1752 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
1756 inline void GenSamplers(GLsizei count, GLuint* samplers)
1760 inline void DeleteSamplers(GLsizei count, const GLuint* samplers)
1764 inline GLboolean IsSampler(GLuint sampler)
1769 inline void BindSampler(GLuint unit, GLuint sampler)
1773 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
1777 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
1781 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
1785 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
1789 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
1793 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
1797 inline void VertexAttribDivisor(GLuint index, GLuint divisor)
1801 inline void BindTransformFeedback(GLenum target, GLuint id)
1805 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
1809 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids)
1813 inline GLboolean IsTransformFeedback(GLuint id)
1818 inline void PauseTransformFeedback(void)
1822 inline void ResumeTransformFeedback(void)
1826 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
1828 mGetProgramBinaryCalled = true;
1831 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
1835 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value)
1839 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
1843 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
1847 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
1851 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
1855 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
1861 inline void AddUniformCallToTraceStack( GLint location, std::string& value )
1863 std::string name = "<not found>";
1864 bool matched = false;
1866 UniformIDMap& map = mUniforms[mCurrentProgram];
1867 for (UniformIDMap::iterator it=map.begin(); it!=map.end(); ++it)
1869 if( it->second == location )
1879 mSetUniformTrace.PushCall( name, value );
1884 public: // TEST FUNCTIONS
1885 inline void SetCompileStatus( GLuint value ) { mCompileStatus = value; }
1886 inline void SetLinkStatus( GLuint value ) { mLinkStatus = value; }
1887 inline void SetGetAttribLocationResult( int result) { mGetAttribLocationResult = result; }
1888 inline void SetGetErrorResult( GLenum result) { mGetErrorResult = result; }
1889 inline void SetGetStringResult( GLubyte* result) { mGetStringResult = result; }
1890 inline void SetIsBufferResult( GLboolean result) { mIsBufferResult = result; }
1891 inline void SetIsEnabledResult( GLboolean result) { mIsEnabledResult = result; }
1892 inline void SetIsFramebufferResult( GLboolean result) { mIsFramebufferResult = result; }
1893 inline void SetIsProgramResult( GLboolean result) { mIsProgramResult = result; }
1894 inline void SetIsRenderbufferResult( GLboolean result) { mIsRenderbufferResult = result; }
1895 inline void SetIsShaderResult( GLboolean result) { mIsShaderResult = result; }
1896 inline void SetIsTextureResult( GLboolean result) { mIsTextureResult = result; }
1897 inline void SetCheckFramebufferStatusResult( GLenum result) { mCheckFramebufferStatusResult = result; }
1898 inline void SetNumBinaryFormats( GLint numFormats ) { mNumBinaryFormats = numFormats; }
1899 inline void SetBinaryFormats( GLint binaryFormats ) { mBinaryFormats = binaryFormats; }
1900 inline void SetProgramBinaryLength( GLint length ) { mProgramBinaryLength = length; }
1902 inline bool GetVertexAttribArrayState(GLuint index)
1904 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
1909 return mVertexAttribArrayState[ index ];
1911 inline void ClearVertexAttribArrayChanged() { mVertexAttribArrayChanged = false; }
1912 inline bool GetVertexAttribArrayChanged() { return mVertexAttribArrayChanged; }
1914 //Methods for CullFace verification
1915 inline void EnableCullFaceCallTrace(bool enable) { mCullFaceTrace.Enable(enable); }
1916 inline void ResetCullFaceCallStack() { mCullFaceTrace.Reset(); }
1917 inline TraceCallStack& GetCullFaceTrace() { return mCullFaceTrace; }
1919 //Methods for Enable/Disable call verification
1920 inline void EnableEnableDisableCallTrace(bool enable) { mEnableDisableTrace.Enable(enable); }
1921 inline void ResetEnableDisableCallStack() { mEnableDisableTrace.Reset(); }
1922 inline TraceCallStack& GetEnableDisableTrace() { return mEnableDisableTrace; }
1924 //Methods for Shader verification
1925 inline void EnableShaderCallTrace(bool enable) { mShaderTrace.Enable(enable); }
1926 inline void ResetShaderCallStack() { mShaderTrace.Reset(); }
1927 inline TraceCallStack& GetShaderTrace() { return mShaderTrace; }
1929 //Methods for Texture verification
1930 inline void EnableTextureCallTrace(bool enable) { mTextureTrace.Enable(enable); }
1931 inline void ResetTextureCallStack() { mTextureTrace.Reset(); }
1932 inline TraceCallStack& GetTextureTrace() { return mTextureTrace; }
1934 //Methods for Texture verification
1935 inline void EnableTexParameterCallTrace(bool enable) { mTexParamaterTrace.Enable(enable); }
1936 inline void ResetTexParameterCallStack() { mTexParamaterTrace.Reset(); }
1937 inline TraceCallStack& GetTexParameterTrace() { return mTexParamaterTrace; }
1939 //Methods for Draw verification
1940 inline void EnableDrawCallTrace(bool enable) { mDrawTrace.Enable(enable); }
1941 inline void ResetDrawCallStack() { mDrawTrace.Reset(); }
1942 inline TraceCallStack& GetDrawTrace() { return mDrawTrace; }
1944 //Methods for Depth function verification
1945 inline void EnableDepthFunctionCallTrace(bool enable) { mDepthFunctionTrace.Enable(enable); }
1946 inline void ResetDepthFunctionCallStack() { mDepthFunctionTrace.Reset(); }
1947 inline TraceCallStack& GetDepthFunctionTrace() { return mDepthFunctionTrace; }
1949 //Methods for Stencil function verification
1950 inline void EnableStencilFunctionCallTrace(bool enable) { mStencilFunctionTrace.Enable(enable); }
1951 inline void ResetStencilFunctionCallStack() { mStencilFunctionTrace.Reset(); }
1952 inline TraceCallStack& GetStencilFunctionTrace() { return mStencilFunctionTrace; }
1954 //Methods for Uniform function verification
1955 inline void EnableSetUniformCallTrace(bool enable) { mSetUniformTrace.Enable(enable); }
1956 inline void ResetSetUniformCallStack() { mSetUniformTrace.Reset(); }
1957 inline TraceCallStack& GetSetUniformTrace() { return mSetUniformTrace; }
1959 template <typename T>
1960 inline bool GetUniformValue( const char* name, T& value ) const
1962 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1963 program_it != mUniforms.end();
1966 const UniformIDMap &uniformIDs = program_it->second;
1968 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1969 if( uniform_it != uniformIDs.end() )
1971 // found one matching uniform name, lets check the value...
1972 GLuint programId = program_it->first;
1973 GLint uniformId = uniform_it->second;
1975 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
1976 return mProgramUniforms.GetUniformValue( programId, uniformId, value );
1983 template <typename T>
1984 inline bool CheckUniformValue( const char* name, const T& value ) const
1986 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
1987 program_it != mUniforms.end();
1990 const UniformIDMap &uniformIDs = program_it->second;
1992 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
1993 if( uniform_it != uniformIDs.end() )
1995 // found one matching uniform name, lets check the value...
1996 GLuint programId = program_it->first;
1997 GLint uniformId = uniform_it->second;
1999 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
2000 if( mProgramUniforms.CheckUniformValue( programId, uniformId, value ) )
2002 // the value matches
2008 fprintf(stderr, "Not found, printing possible values:\n" );
2009 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2010 program_it != mUniforms.end();
2013 const UniformIDMap &uniformIDs = program_it->second;
2015 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
2016 if( uniform_it != uniformIDs.end() )
2018 // found one matching uniform name, lets check the value...
2019 GLuint programId = program_it->first;
2020 GLint uniformId = uniform_it->second;
2022 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( value );
2024 if ( mProgramUniforms.GetUniformValue(programId, uniformId, origValue) )
2026 std::stringstream out;
2027 out << uniform_it->first << ": " << origValue;
2028 fprintf(stderr, "%s\n", out.str().c_str() );
2035 template <typename T>
2036 inline bool GetUniformValue( GLuint programId, GLuint uniformId, T& outValue) const
2038 const ProgramUniformValue<T> &mProgramUniforms = GetProgramUniformsForType( outValue );
2039 return mProgramUniforms.GetUniformValue( programId, uniformId, outValue );
2042 inline bool GetUniformIds( const char* name, GLuint& programId, GLuint& uniformId ) const
2044 for( ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2045 program_it != mUniforms.end();
2048 const UniformIDMap &uniformIDs = program_it->second;
2050 UniformIDMap::const_iterator uniform_it = uniformIDs.find( name );
2051 if( uniform_it != uniformIDs.end() )
2053 programId = program_it->first;
2054 uniformId = uniform_it->second;
2061 inline GLuint GetLastShaderCompiled() const
2063 return mLastShaderCompiled;
2066 inline GLuint GetLastProgramCreated() const
2068 return mLastProgramIdUsed;
2071 inline GLbitfield GetLastClearMask() const
2073 return mLastClearBitMask;
2078 ATTRIB_UNKNOWN = -1,
2083 ATTRIB_BONE_WEIGHTS,
2084 ATTRIB_BONE_INDICES,
2088 struct ScissorParams
2095 ScissorParams() : x( 0 ), y( 0 ), width( 0 ), height( 0 ) { }
2098 // Methods to check scissor tests
2099 inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
2101 struct ColorMaskParams
2108 ColorMaskParams() : red( true ), green( true ), blue( true ), alpha( true ) { }
2111 inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
2113 inline unsigned int GetClearCountCalled() const { return mClearCount; }
2115 inline const ColorMaskParams& GetColorMaskParams() const { return mColorMaskParams; }
2117 typedef std::vector<size_t> BufferDataCalls;
2118 inline const BufferDataCalls& GetBufferDataCalls() const { return mBufferDataCalls; }
2119 inline void ResetBufferDataCalls() { mBufferDataCalls.clear(); }
2121 typedef std::vector<size_t> BufferSubDataCalls;
2122 inline const BufferSubDataCalls& GetBufferSubDataCalls() const { return mBufferSubDataCalls; }
2123 inline void ResetBufferSubDataCalls() { mBufferSubDataCalls.clear(); }
2126 GLuint mCurrentProgram;
2127 GLuint mCompileStatus;
2128 BufferDataCalls mBufferDataCalls;
2129 BufferSubDataCalls mBufferSubDataCalls;
2131 GLint mNumberOfActiveUniforms;
2132 GLint mGetAttribLocationResult;
2133 GLenum mGetErrorResult;
2134 GLubyte* mGetStringResult;
2135 GLboolean mIsBufferResult;
2136 GLboolean mIsEnabledResult;
2137 GLboolean mIsFramebufferResult;
2138 GLboolean mIsProgramResult;
2139 GLboolean mIsRenderbufferResult;
2140 GLboolean mIsShaderResult;
2141 GLboolean mIsTextureResult;
2142 GLenum mActiveTextureUnit;
2143 GLenum mCheckFramebufferStatusResult;
2144 GLint mFramebufferStatus;
2145 GLenum mFramebufferColorAttached;
2146 GLenum mFramebufferDepthAttached;
2147 GLenum mFramebufferStencilAttached;
2148 GLint mNumBinaryFormats;
2149 GLint mBinaryFormats;
2150 GLint mProgramBinaryLength;
2151 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
2152 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
2153 bool mGetProgramBinaryCalled;
2154 typedef std::map< GLuint, std::string> ShaderSourceMap;
2155 ShaderSourceMap mShaderSources;
2156 GLuint mLastShaderCompiled;
2157 GLbitfield mLastClearBitMask;
2158 unsigned int mClearCount;
2160 Vector4 mLastBlendColor;
2161 GLenum mLastBlendEquationRgb;
2162 GLenum mLastBlendEquationAlpha;
2163 GLenum mLastBlendFuncSrcRgb;
2164 GLenum mLastBlendFuncDstRgb;
2165 GLenum mLastBlendFuncSrcAlpha;
2166 GLenum mLastBlendFuncDstAlpha;
2168 GLboolean mLastDepthMask;
2170 // Data for manipulating the IDs returned by GenTextures
2171 GLuint mLastAutoTextureIdUsed;
2172 GLuint mNumGeneratedTextures;
2173 std::vector<GLuint> mNextTextureIds;
2174 std::vector<GLuint> mDeletedTextureIds;
2175 std::vector<GLuint> mBoundTextures;
2177 struct ActiveTextureType
2179 std::vector<GLuint> mBoundTextures;
2182 ActiveTextureType mActiveTextures[ MIN_TEXTURE_UNIT_LIMIT ];
2184 TraceCallStack mCullFaceTrace;
2185 TraceCallStack mEnableDisableTrace;
2186 TraceCallStack mShaderTrace;
2187 TraceCallStack mTextureTrace;
2188 TraceCallStack mTexParamaterTrace;
2189 TraceCallStack mDrawTrace;
2190 TraceCallStack mDepthFunctionTrace;
2191 TraceCallStack mStencilFunctionTrace;
2192 TraceCallStack mSetUniformTrace;
2194 // Shaders & Uniforms
2195 GLuint mLastShaderIdUsed;
2196 GLuint mLastProgramIdUsed;
2197 GLuint mLastUniformIdUsed;
2198 typedef std::map< std::string, GLint > UniformIDMap;
2199 typedef std::map< GLuint, UniformIDMap > ProgramUniformMap;
2200 ProgramUniformMap mUniforms;
2202 template <typename T>
2203 struct ProgramUniformValue : public std::map< GLuint, std::map< GLint, T > >
2206 typedef std::map< GLint, T > UniformValueMap;
2207 typedef std::map< GLuint, UniformValueMap > Map;
2209 bool SetUniformValue( GLuint program, GLuint uniform, const T& value )
2216 typename Map::iterator it = Map::find( program );
2217 if( it == Map::end() )
2219 // if its the first uniform for this program add it
2220 std::pair< typename Map::iterator, bool > result =
2221 Map::insert( typename Map::value_type( program, UniformValueMap() ) );
2225 UniformValueMap& uniforms = it->second;
2226 uniforms[uniform] = value;
2231 bool CheckUniformValue( GLuint program, GLuint uniform, const T& value ) const
2234 if ( GetUniformValue( program, uniform, uniformValue ) )
2236 return CompareType<T>(value, uniformValue, Math::MACHINE_EPSILON_10);
2242 bool GetUniformValue( GLuint program, GLuint uniform, T& value ) const
2249 typename Map::const_iterator it = Map::find( program );
2250 if( it == Map::end() )
2252 // Uniform values always initialised as 0
2257 const UniformValueMap& uniforms = it->second;
2258 typename UniformValueMap::const_iterator it2 = uniforms.find( uniform );
2259 if( it2 == uniforms.end() )
2261 // Uniform values always initialised as 0
2265 value = it2->second;
2272 ProgramUniformValue<int> mProgramUniforms1i;
2273 ProgramUniformValue<float> mProgramUniforms1f;
2274 ProgramUniformValue<Vector2> mProgramUniforms2f;
2275 ProgramUniformValue<Vector3> mProgramUniforms3f;
2276 ProgramUniformValue<Vector4> mProgramUniforms4f;
2277 ProgramUniformValue<Matrix> mProgramUniformsMat4;
2278 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
2280 inline const ProgramUniformValue<int>& GetProgramUniformsForType( const int ) const
2282 return mProgramUniforms1i;
2284 inline const ProgramUniformValue<float>& GetProgramUniformsForType( const float ) const
2286 return mProgramUniforms1f;
2288 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType( const Vector2& ) const
2290 return mProgramUniforms2f;
2292 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType( const Vector3& ) const
2294 return mProgramUniforms3f;
2296 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType( const Vector4& ) const
2298 return mProgramUniforms4f;
2300 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType( const Matrix& ) const
2302 return mProgramUniformsMat4;
2304 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType( const Matrix3& ) const
2306 return mProgramUniformsMat3;
2308 inline void SetVertexAttribArray(GLuint index, bool state)
2310 if( index >= MAX_ATTRIBUTE_CACHE_SIZE )
2315 mVertexAttribArrayState[ index ] = state;
2316 mVertexAttribArrayChanged = true;
2319 ScissorParams mScissorParams;
2320 ColorMaskParams mColorMaskParams;
2324 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
2330 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
2336 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
2338 return Vector2::ZERO;
2342 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
2344 return Vector3::ZERO;
2348 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
2350 return Vector4::ZERO;
2354 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
2360 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
2362 return Matrix3( Matrix() );
2367 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2368 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2371 #endif // TEST_GL_ABSTRACTION_H