1 #ifndef TEST_GL_ABSTRACTION_H
2 #define TEST_GL_ABSTRACTION_H
5 * Copyright (c) 2021 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.
24 #include <cstring> // for strcmp
31 #include <dali/devel-api/rendering/frame-buffer-devel.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 <dali/public-api/dali-core.h>
36 #include <test-compare-types.h>
37 #include <test-trace-call-stack.h>
46 UniformData( const std::string& name, Property::Type type = Property::Type::NONE)
47 : name(name), type(type)
51 class DALI_CORE_API TestGlAbstraction : public Dali::Integration::GlAbstraction
54 static const int MAX_ATTRIBUTE_CACHE_SIZE{64};
57 ~TestGlAbstraction() override;
60 void PreRender() override;
61 void PostRender() override;
63 bool IsSurfacelessContextSupported() const override;
65 bool IsAdvancedBlendEquationSupported() override;
67 bool IsBlendEquationSupported(DevelBlendEquation::Type blendEquation) override;
69 std::string GetShaderVersionPrefix();
71 std::string GetVertexShaderPrefix();
73 std::string GetFragmentShaderPrefix();
75 bool TextureRequiresConverting(const GLenum imageGlFormat, const GLenum textureGlFormat, const bool isSubImage) const override;
79 inline void ActiveTexture(GLenum textureUnit) override
81 mActiveTextureUnit = textureUnit - GL_TEXTURE0;
84 inline GLenum GetActiveTextureUnit() const
86 return mActiveTextureUnit + GL_TEXTURE0;
89 inline void AttachShader(GLuint program, GLuint shader) override
91 std::stringstream out;
92 out << program << ", " << shader;
94 TraceCallStack::NamedParams namedParams;
95 namedParams["program"] << program;
96 namedParams["shader"] << shader;
97 mShaderTrace.PushCall("AttachShader", out.str(), namedParams);
100 inline void BindAttribLocation(GLuint program, GLuint index, const char* name) override
104 inline void BindBuffer(GLenum target, GLuint buffer) override
106 std::ostringstream o;
107 o << std::hex << target << ", " << buffer;
108 TraceCallStack::NamedParams namedParams;
109 namedParams["target"] << target;
110 namedParams["buffer"] << buffer;
111 mBufferTrace.PushCall("BindBuffer", o.str(), namedParams);
114 inline void BindFramebuffer(GLenum target, GLuint framebuffer) override
117 mFramebufferStatus |= 2;
120 inline void BindRenderbuffer(GLenum target, GLuint renderbuffer) override
125 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
126 * @return A vector containing the IDs that were bound.
128 inline const std::vector<GLuint>& GetBoundTextures() const
130 return mBoundTextures;
134 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
135 * @param[in] activeTextureUnit The specific active texture unit.
136 * @return A vector containing the IDs that were bound.
138 inline const std::vector<GLuint>& GetBoundTextures(GLuint activeTextureUnit) const
140 return mActiveTextures[activeTextureUnit - GL_TEXTURE0].mBoundTextures;
144 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
146 inline void ClearBoundTextures()
148 mBoundTextures.clear();
150 for(unsigned int i = 0; i < MIN_TEXTURE_UNIT_LIMIT; ++i)
152 mActiveTextures[i].mBoundTextures.clear();
156 inline void BindTexture(GLenum target, GLuint texture) override
158 // Record the bound textures for future checks
161 mBoundTextures.push_back(texture);
163 if(mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT)
165 mActiveTextures[mActiveTextureUnit].mBoundTextures.push_back(texture);
169 std::stringstream out;
170 out << std::hex << target << ", " << std::dec << texture;
172 TraceCallStack::NamedParams namedParams;
173 namedParams["target"] << std::hex << target;
174 namedParams["texture"] << texture;
176 mTextureTrace.PushCall("BindTexture", out.str(), namedParams);
179 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) override
181 mLastBlendColor.r = red;
182 mLastBlendColor.g = green;
183 mLastBlendColor.b = blue;
184 mLastBlendColor.a = alpha;
187 inline const Vector4& GetLastBlendColor() const
189 return mLastBlendColor;
192 inline void BlendEquation(GLenum mode) override
194 mLastBlendEquationRgb = mode;
195 mLastBlendEquationAlpha = mode;
198 inline void BlendEquationSeparate(GLenum modeRgb, GLenum modeAlpha) override
200 mLastBlendEquationRgb = modeRgb;
201 mLastBlendEquationAlpha = modeAlpha;
204 inline GLenum GetLastBlendEquationRgb() const
206 return mLastBlendEquationRgb;
209 inline GLenum GetLastBlendEquationAlpha() const
211 return mLastBlendEquationAlpha;
214 inline void BlendFunc(GLenum sfactor, GLenum dfactor) override
216 mLastBlendFuncSrcRgb = sfactor;
217 mLastBlendFuncDstRgb = dfactor;
218 mLastBlendFuncSrcAlpha = sfactor;
219 mLastBlendFuncDstAlpha = dfactor;
222 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) override
224 mLastBlendFuncSrcRgb = srcRGB;
225 mLastBlendFuncDstRgb = dstRGB;
226 mLastBlendFuncSrcAlpha = srcAlpha;
227 mLastBlendFuncDstAlpha = dstAlpha;
230 inline GLenum GetLastBlendFuncSrcRgb() const
232 return mLastBlendFuncSrcRgb;
235 inline GLenum GetLastBlendFuncDstRgb() const
237 return mLastBlendFuncDstRgb;
240 inline GLenum GetLastBlendFuncSrcAlpha() const
242 return mLastBlendFuncSrcAlpha;
245 inline GLenum GetLastBlendFuncDstAlpha() const
247 return mLastBlendFuncDstAlpha;
250 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage) override
252 std::ostringstream o;
253 o << std::hex << target << ", " << size << ", " << data << ", " << usage;
254 TraceCallStack::NamedParams namedParams;
255 namedParams["target"] << std::hex << target;
256 namedParams["size"] << size;
257 namedParams["usage"] << usage;
259 mBufferTrace.PushCall("BufferData", o.str(), namedParams);
261 mBufferDataCalls.push_back(size);
264 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data) override
266 std::ostringstream o;
267 o << std::hex << target << ", " << offset << ", " << size << ", " << data;
268 TraceCallStack::NamedParams namedParams;
269 namedParams["target"] << std::hex << target;
270 namedParams["offset"] << offset;
271 namedParams["size"] << size;
272 mBufferTrace.PushCall("BufferSubData", o.str());
274 mBufferSubDataCalls.push_back(size);
277 inline GLenum CheckFramebufferStatus(GLenum target) override
279 //If it has the three last bits set to 1 - 111, then the three minimum functions to create a
280 //Framebuffer texture have been called
281 if(mFramebufferStatus == 7)
283 return GL_FRAMEBUFFER_COMPLETE;
286 return mCheckFramebufferStatusResult;
289 inline GLuint CheckFramebufferColorAttachmentCount()
291 return mFramebufferColorAttachmentCount;
294 inline GLenum CheckFramebufferDepthAttachment()
296 return mFramebufferDepthAttached;
299 inline GLenum CheckFramebufferStencilAttachment()
301 return mFramebufferStencilAttached;
304 inline void Clear(GLbitfield mask) override
307 mLastClearBitMask = mask;
310 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) override
312 mLastClearColor.r = red;
313 mLastClearColor.g = green;
314 mLastClearColor.b = blue;
315 mLastClearColor.a = alpha;
318 inline const Vector4& GetLastClearColor() const
320 return mLastClearColor;
323 inline void ClearDepthf(GLclampf depth) override
327 inline void ClearStencil(GLint s) override
329 std::stringstream out;
332 TraceCallStack::NamedParams namedParams;
333 namedParams["s"] << s;
335 mStencilFunctionTrace.PushCall("ClearStencil", out.str(), namedParams);
338 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) override
340 mColorMaskParams.red = red;
341 mColorMaskParams.green = green;
342 mColorMaskParams.blue = blue;
343 mColorMaskParams.alpha = alpha;
346 inline void CompileShader(GLuint shader) override
348 std::stringstream out;
350 TraceCallStack::NamedParams namedParams;
351 namedParams["shader"] << shader;
353 mShaderTrace.PushCall("CompileShader", out.str(), namedParams);
356 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) override
358 std::stringstream out;
359 out << target << ", " << level << ", " << width << ", " << height;
361 TraceCallStack::NamedParams namedParams;
362 namedParams["target"] << std::hex << target;
363 namedParams["level"] << level;
364 namedParams["internalformat"] << internalformat;
365 namedParams["width"] << width;
366 namedParams["height"] << height;
367 namedParams["border"] << border;
368 namedParams["size"] << imageSize;
370 mTextureTrace.PushCall("CompressedTexImage2D", out.str(), namedParams);
373 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) override
375 std::stringstream out;
376 out << target << ", " << level << ", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
378 TraceCallStack::NamedParams namedParams;
379 namedParams["target"] << std::hex << target;
380 namedParams["level"] << level;
381 namedParams["xoffset"] << xoffset;
382 namedParams["yoffset"] << yoffset;
383 namedParams["width"] << width;
384 namedParams["height"] << height;
385 mTextureTrace.PushCall("CompressedTexSubImage2D", out.str(), namedParams);
388 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) override
392 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
396 inline GLuint CreateProgram(void) override
398 mShaderTrace.PushCall("CreateProgram", "");
400 ++mLastProgramIdUsed;
401 mUniforms[mLastProgramIdUsed] = UniformIDMap();
402 return mLastProgramIdUsed;
405 inline GLuint CreateShader(GLenum type) override
407 std::stringstream out;
410 TraceCallStack::NamedParams namedParams;
411 namedParams["type"] << std::hex << type;
412 mShaderTrace.PushCall("CreateShader", out.str(), namedParams);
414 return ++mLastShaderIdUsed;
417 inline void CullFace(GLenum mode) override
419 std::stringstream out;
420 out << std::hex << mode;
422 TraceCallStack::NamedParams namedParams;
423 namedParams["mode"] << std::hex << mode;
425 mCullFaceTrace.PushCall("CullFace", out.str(), namedParams);
428 inline void DeleteBuffers(GLsizei n, const GLuint* buffers) override
432 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override
436 inline void DeleteProgram(GLuint program) override
438 std::stringstream out;
441 TraceCallStack::NamedParams namedParams;
442 namedParams["program"] << program;
444 mShaderTrace.PushCall("DeleteProgram", out.str(), namedParams);
447 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override
451 inline void DeleteShader(GLuint shader) override
453 std::stringstream out;
456 TraceCallStack::NamedParams namedParams;
457 namedParams["shader"] << shader;
459 mShaderTrace.PushCall("DeleteShader", out.str(), namedParams);
462 inline void DeleteTextures(GLsizei n, const GLuint* textures) override
464 std::stringstream out;
465 out << "n:" << n << " textures[";
467 TraceCallStack::NamedParams namedParams;
469 for(GLsizei i = 0; i < n; i++)
471 out << (i > 0 ? ", " : "") << textures[i];
472 std::stringstream paramName;
473 paramName << "texture[" << i << "]";
474 namedParams[paramName.str()] << textures[i];
475 mDeletedTextureIds.push_back(textures[i]);
476 mNumGeneratedTextures--;
480 mTextureTrace.PushCall("DeleteTextures", out.str(), namedParams);
483 inline bool CheckNoTexturesDeleted()
485 return mDeletedTextureIds.size() == 0;
488 inline bool CheckTextureDeleted(GLuint textureId)
492 for(std::vector<GLuint>::iterator iter = mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
494 if(*iter == textureId)
503 inline void ClearDeletedTextures()
505 mDeletedTextureIds.clear();
508 inline void DepthFunc(GLenum func) override
510 std::stringstream out;
511 out << std::hex << func;
513 TraceCallStack::NamedParams namedParams;
514 namedParams["func"] << std::hex << func;
516 mDepthFunctionTrace.PushCall("DepthFunc", out.str(), namedParams);
519 inline void DepthMask(GLboolean flag) override
521 mLastDepthMask = flag;
524 inline bool GetLastDepthMask() const
526 return mLastDepthMask;
529 inline void DepthRangef(GLclampf zNear, GLclampf zFar) override
533 inline void DetachShader(GLuint program, GLuint shader) override
535 std::stringstream out;
536 out << program << ", " << shader;
537 TraceCallStack::NamedParams namedParams;
538 namedParams["program"] << program;
539 namedParams["shader"] << shader;
540 mShaderTrace.PushCall("DetachShader", out.str(), namedParams);
543 inline void Disable(GLenum cap) override
545 std::stringstream out;
546 out << std::hex << cap;
547 TraceCallStack::NamedParams namedParams;
548 namedParams["cap"] << std::hex << cap;
549 mEnableDisableTrace.PushCall("Disable", out.str(), namedParams);
552 inline void DisableVertexAttribArray(GLuint index) override
554 std::stringstream out;
556 TraceCallStack::NamedParams namedParams;
557 namedParams["index"] << index;
558 mBufferTrace.PushCall("DisableVertexAttribArray", out.str(), namedParams);
559 SetVertexAttribArray(index, false);
562 inline void DrawArrays(GLenum mode, GLint first, GLsizei count) override
564 std::stringstream out;
565 out << mode << ", " << first << ", " << count;
566 TraceCallStack::NamedParams namedParams;
567 namedParams["mode"] << std::hex << mode;
568 namedParams["first"] << first;
569 namedParams["count"] << count;
570 mDrawTrace.PushCall("DrawArrays", out.str(), namedParams);
573 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices) override
575 std::stringstream out;
576 out << mode << ", " << count << ", " << type << ", indices";
578 TraceCallStack::NamedParams namedParams;
579 namedParams["mode"] << std::hex << mode;
580 namedParams["count"] << count;
581 namedParams["type"] << type;
582 // Skip void pointers - are they of any use?
583 mDrawTrace.PushCall("DrawElements", out.str(), namedParams);
586 inline void Enable(GLenum cap) override
588 std::stringstream out;
589 out << std::hex << cap;
590 TraceCallStack::NamedParams namedParams;
591 namedParams["cap"] << std::hex << cap;
592 mEnableDisableTrace.PushCall("Enable", out.str(), namedParams);
595 inline void EnableVertexAttribArray(GLuint index) override
597 std::stringstream out;
599 TraceCallStack::NamedParams namedParams;
600 namedParams["index"] << index;
601 mBufferTrace.PushCall("EnableVertexAttribArray", out.str(), namedParams);
602 SetVertexAttribArray(index, true);
605 inline void Finish(void) override
609 inline void Flush(void) override
613 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) override
615 if(attachment == GL_DEPTH_ATTACHMENT)
617 mFramebufferDepthAttached = true;
619 else if(attachment == GL_STENCIL_ATTACHMENT)
621 mFramebufferStencilAttached = true;
625 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) override
628 mFramebufferStatus |= 4;
630 //We check 4 attachment colors
631 if((attachment >= GL_COLOR_ATTACHMENT0) && (attachment < GL_COLOR_ATTACHMENT0 + Dali::DevelFrameBuffer::MAX_COLOR_ATTACHMENTS))
633 uint8_t mask = 1 << (attachment - GL_COLOR_ATTACHMENT0);
634 if((mFrameBufferColorStatus & mask) == 0)
636 mFrameBufferColorStatus |= mask;
637 ++mFramebufferColorAttachmentCount;
642 inline void FrontFace(GLenum mode) override
647 inline void GenBuffers(GLsizei n, GLuint* buffers) override
649 // avoids an assert in GpuBuffers
652 std::ostringstream o;
654 TraceCallStack::NamedParams namedParams;
655 namedParams["n"] << o.str();
656 mBufferTrace.PushCall("GenBuffers", o.str(), namedParams);
659 inline void GenerateMipmap(GLenum target) override
661 std::stringstream out;
663 TraceCallStack::NamedParams namedParams;
664 namedParams["target"] << std::hex << target;
666 mTextureTrace.PushCall("GenerateMipmap", out.str(), namedParams);
669 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers) override
671 for(int i = 0; i < n; i++)
673 framebuffers[i] = i + 1;
676 //Add 001 bit, this function needs to be called the first one in the chain
677 mFramebufferStatus = 1;
680 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override
682 for(int i = 0; i < n; i++)
684 renderbuffers[i] = i + 1;
689 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
690 * @param[in] ids A vector containing the next IDs to be generated
692 inline void SetNextTextureIds(const std::vector<GLuint>& ids)
694 mNextTextureIds = ids;
697 inline const std::vector<GLuint>& GetNextTextureIds()
699 return mNextTextureIds;
702 inline void GenTextures(GLsizei count, GLuint* textures) override
704 for(int i = 0; i < count; ++i)
706 if(!mNextTextureIds.empty())
708 *(textures + i) = mNextTextureIds[0];
709 mNextTextureIds.erase(mNextTextureIds.begin());
713 *(textures + i) = ++mLastAutoTextureIdUsed;
715 mNumGeneratedTextures++;
718 TraceCallStack::NamedParams namedParams;
719 namedParams["count"] << count;
721 std::stringstream out;
722 for(int i = 0; i < count; i++)
729 std::ostringstream oss;
730 oss << "indices[" << i << "]";
731 namedParams[oss.str()] << textures[i];
734 mTextureTrace.PushCall("GenTextures", out.str(), namedParams);
737 inline GLuint GetLastGenTextureId()
739 return mLastAutoTextureIdUsed;
742 inline GLuint GetNumGeneratedTextures()
744 return mNumGeneratedTextures;
747 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) override
751 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) override
756 *length = snprintf(name, bufsize, "sTexture");
757 *type = GL_SAMPLER_2D;
761 *length = snprintf(name, bufsize, "sEffect");
762 *type = GL_SAMPLER_2D;
766 *length = snprintf(name, bufsize, "sGloss");
767 *type = GL_SAMPLER_2D;
775 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) override
779 inline int GetAttribLocation(GLuint program, const char* name) override
781 std::string check(name);
782 auto iter = std::find(mAttribLocs.begin(), mAttribLocs.end(), check);
783 if(iter == mAttribLocs.end())
785 return iter - mAttribLocs.begin();
788 inline void GetBooleanv(GLenum pname, GLboolean* params) override
792 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override
796 inline GLenum GetError(void) override
798 return mGetErrorResult;
801 inline void GetFloatv(GLenum pname, GLfloat* params) override
805 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) override
809 inline void GetIntegerv(GLenum pname, GLint* params) override
813 case GL_MAX_TEXTURE_SIZE:
816 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
819 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
820 *params = mNumBinaryFormats;
822 case GL_PROGRAM_BINARY_FORMATS_OES:
823 *params = mBinaryFormats;
828 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params) override
833 *params = mLinkStatus;
835 case GL_PROGRAM_BINARY_LENGTH_OES:
836 *params = mProgramBinaryLength;
838 case GL_ACTIVE_UNIFORMS:
839 *params = mNumberOfActiveUniforms;
841 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
844 case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
850 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) override
854 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) override
858 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override
862 case GL_COMPILE_STATUS:
863 *params = mCompileStatus;
868 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) override
872 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) override
876 inline const GLubyte* GetString(GLenum name) override
878 return mGetStringResult;
881 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override
885 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override
889 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params) override
893 inline void GetUniformiv(GLuint program, GLint location, GLint* params) override
897 inline GLint GetUniformLocation(GLuint program, const char* name) override
899 ProgramUniformMap::iterator it = mUniforms.find(program);
900 if(it == mUniforms.end())
902 // Not a valid program ID
903 mGetErrorResult = GL_INVALID_OPERATION;
907 UniformIDMap& uniformIDs = it->second;
908 UniformIDMap::iterator it2 = uniformIDs.find(name);
909 if(it2 == uniformIDs.end())
911 // Uniform not found, so add it...
912 uniformIDs[name] = mLastUniformIdUsed++;
913 return mLastUniformIdUsed;
919 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override
923 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override
927 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) override
931 inline void Hint(GLenum target, GLenum mode) override
935 inline GLboolean IsBuffer(GLuint buffer) override
937 return mIsBufferResult;
940 inline GLboolean IsEnabled(GLenum cap) override
942 return mIsEnabledResult;
945 inline GLboolean IsFramebuffer(GLuint framebuffer) override
947 return mIsFramebufferResult;
950 inline GLboolean IsProgram(GLuint program) override
952 return mIsProgramResult;
955 inline GLboolean IsRenderbuffer(GLuint renderbuffer) override
957 return mIsRenderbufferResult;
960 inline GLboolean IsShader(GLuint shader) override
962 return mIsShaderResult;
965 inline GLboolean IsTexture(GLuint texture) override
967 return mIsTextureResult;
970 inline void LineWidth(GLfloat width) override
974 inline void LinkProgram(GLuint program) override
976 std::stringstream out;
979 TraceCallStack::NamedParams namedParams;
980 namedParams["program"] << program;
981 mShaderTrace.PushCall("LinkProgram", out.str(), namedParams);
983 mNumberOfActiveUniforms = 3;
985 GetUniformLocation(program, "uRendererColor");
986 GetUniformLocation(program, "uCustom");
987 GetUniformLocation(program, "uCustom3");
988 GetUniformLocation(program, "uFadeColor");
989 GetUniformLocation(program, "uUniform1");
990 GetUniformLocation(program, "uUniform2");
991 GetUniformLocation(program, "uUniform3");
992 GetUniformLocation(program, "uFadeProgress");
993 GetUniformLocation(program, "uANormalMatrix");
994 GetUniformLocation(program, "sEffect");
995 GetUniformLocation(program, "sTexture");
996 GetUniformLocation(program, "sTextureRect");
997 GetUniformLocation(program, "sGloss");
998 GetUniformLocation(program, "uColor");
999 GetUniformLocation(program, "uModelMatrix");
1000 GetUniformLocation(program, "uModelView");
1001 GetUniformLocation(program, "uMvpMatrix");
1002 GetUniformLocation(program, "uNormalMatrix");
1003 GetUniformLocation(program, "uProjection");
1004 GetUniformLocation(program, "uSize");
1005 GetUniformLocation(program, "uViewMatrix");
1006 GetUniformLocation(program, "uLightCameraProjectionMatrix");
1007 GetUniformLocation(program, "uLightCameraViewMatrix");
1009 for( const auto& uniform : mCustomUniformData )
1011 GetUniformLocation(program, uniform.name.c_str());
1015 inline void PixelStorei(GLenum pname, GLint param) override
1019 inline void PolygonOffset(GLfloat factor, GLfloat units) override
1023 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) override
1027 inline void ReleaseShaderCompiler(void) override
1031 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) override
1035 inline void SampleCoverage(GLclampf value, GLboolean invert) override
1039 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override
1041 mScissorParams.x = x;
1042 mScissorParams.y = y;
1043 mScissorParams.width = width;
1044 mScissorParams.height = height;
1046 std::stringstream out;
1047 out << x << ", " << y << ", " << width << ", " << height;
1048 TraceCallStack::NamedParams namedParams;
1049 namedParams["x"] << x;
1050 namedParams["y"] << y;
1051 namedParams["width"] << width;
1052 namedParams["height"] << height;
1053 mScissorTrace.PushCall("Scissor", out.str(), namedParams);
1056 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) override
1060 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) override
1062 std::string stringBuilder;
1063 for(int i = 0; i < count; ++i)
1065 stringBuilder += string[i];
1067 mShaderSources[shader] = stringBuilder;
1068 mLastShaderCompiled = shader;
1071 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) override
1073 const std::string shaderSource = mShaderSources[shader];
1074 const int shaderSourceLength = static_cast<int>(shaderSource.length());
1075 if(shaderSourceLength < bufsize)
1077 strncpy(source, shaderSource.c_str(), shaderSourceLength);
1078 *length = shaderSourceLength;
1082 *length = bufsize - 1;
1083 strncpy(source, shaderSource.c_str(), *length);
1084 source[*length] = 0x0;
1088 inline std::string GetShaderSource(GLuint shader)
1090 return mShaderSources[shader];
1093 inline void StencilFunc(GLenum func, GLint ref, GLuint mask) override
1095 std::stringstream out;
1096 out << func << ", " << ref << ", " << mask;
1098 TraceCallStack::NamedParams namedParams;
1099 namedParams["func"] << std::hex << func;
1100 namedParams["ref"] << ref;
1101 namedParams["mask"] << mask;
1103 mStencilFunctionTrace.PushCall("StencilFunc", out.str(), namedParams);
1106 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) override
1108 std::stringstream out;
1109 out << face << ", " << func << ", " << ref << ", " << mask;
1111 TraceCallStack::NamedParams namedParams;
1112 namedParams["face"] << std::hex << face;
1113 namedParams["func"] << std::hex << func;
1114 namedParams["ref"] << ref;
1115 namedParams["mask"] << mask;
1117 mStencilFunctionTrace.PushCall("StencilFuncSeparate", out.str(), namedParams);
1120 inline void StencilMask(GLuint mask) override
1122 std::stringstream out;
1125 TraceCallStack::NamedParams namedParams;
1126 namedParams["mask"] << mask;
1128 mStencilFunctionTrace.PushCall("StencilMask", out.str(), namedParams);
1131 inline void StencilMaskSeparate(GLenum face, GLuint mask) override
1133 std::stringstream out;
1134 out << face << ", " << mask;
1136 TraceCallStack::NamedParams namedParams;
1137 namedParams["face"] << std::hex << face;
1138 namedParams["mask"] << mask;
1140 mStencilFunctionTrace.PushCall("StencilMaskSeparate", out.str(), namedParams);
1143 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override
1145 std::stringstream out;
1146 out << fail << ", " << zfail << ", " << zpass;
1148 TraceCallStack::NamedParams namedParams;
1149 namedParams["fail"] << std::hex << fail;
1150 namedParams["zfail"] << std::hex << zfail;
1151 namedParams["zpass"] << std::hex << zpass;
1153 mStencilFunctionTrace.PushCall("StencilOp", out.str(), namedParams);
1156 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) override
1158 std::stringstream out;
1159 out << face << ", " << fail << ", " << zfail << "," << zpass;
1161 TraceCallStack::NamedParams namedParams;
1162 namedParams["face"] << std::hex << face;
1163 namedParams["fail"] << std::hex << fail;
1164 namedParams["zfail"] << std::hex << zfail;
1165 namedParams["zpass"] << std::hex << zpass;
1167 mStencilFunctionTrace.PushCall("StencilOpSeparate", out.str(), namedParams);
1170 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) override
1172 std::stringstream out;
1173 out << target << ", " << level << ", " << width << ", " << height;
1175 TraceCallStack::NamedParams namedParams;
1176 namedParams["target"] << std::hex << target;
1177 namedParams["level"] << level;
1178 namedParams["internalformat"] << internalformat;
1179 namedParams["width"] << width;
1180 namedParams["height"] << height;
1181 namedParams["border"] << border;
1182 namedParams["format"] << std::hex << format;
1183 namedParams["type"] << std::hex << type;
1185 mTextureTrace.PushCall("TexImage2D", out.str(), namedParams);
1188 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param) override
1190 std::stringstream out;
1191 out << target << ", " << pname << ", " << param;
1193 TraceCallStack::NamedParams namedParams;
1194 namedParams["target"] << std::hex << target;
1195 namedParams["pname"] << std::hex << pname;
1196 namedParams["param"] << param;
1198 mTexParameterTrace.PushCall("TexParameterf", out.str(), namedParams);
1201 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params) override
1203 std::stringstream out;
1204 out << target << ", " << pname << ", " << params[0];
1206 TraceCallStack::NamedParams namedParams;
1207 namedParams["target"] << std::hex << target;
1208 namedParams["pname"] << std::hex << pname;
1209 namedParams["params[0]"] << params[0];
1211 mTexParameterTrace.PushCall("TexParameterfv", out.str(), namedParams);
1214 inline void TexParameteri(GLenum target, GLenum pname, GLint param) override
1216 std::stringstream out;
1217 out << std::hex << target << ", " << pname << ", " << param;
1218 std::string params = out.str();
1220 TraceCallStack::NamedParams namedParams;
1221 namedParams["target"] << std::hex << target;
1222 namedParams["pname"] << std::hex << pname;
1223 namedParams["param"] << param;
1224 mTexParameterTrace.PushCall("TexParameteri", params, namedParams);
1227 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override
1229 std::stringstream out;
1230 out << target << ", " << pname << ", " << params[0];
1231 TraceCallStack::NamedParams namedParams;
1232 namedParams["target"] << std::hex << target;
1233 namedParams["pname"] << std::hex << pname;
1234 namedParams["params[0]"] << params[0];
1235 mTexParameterTrace.PushCall("TexParameteriv", out.str(), namedParams);
1238 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) override
1240 std::stringstream out;
1241 out << target << ", " << level << ", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
1243 TraceCallStack::NamedParams namedParams;
1244 namedParams["target"] << std::hex << target;
1245 namedParams["level"] << level;
1246 namedParams["xoffset"] << xoffset;
1247 namedParams["yoffset"] << yoffset;
1248 namedParams["width"] << width;
1249 namedParams["height"] << height;
1250 mTextureTrace.PushCall("TexSubImage2D", out.str(), namedParams);
1253 inline void Uniform1f(GLint location, GLfloat value) override
1255 std::string params = std::to_string(value);
1256 AddUniformCallToTraceStack(location, params);
1258 if(!mProgramUniforms1f.SetUniformValue(mCurrentProgram, location, value))
1260 mGetErrorResult = GL_INVALID_OPERATION;
1264 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override
1267 for(int i = 0; i < count; ++i)
1269 params = params + std::to_string(v[i]) + ",";
1272 AddUniformCallToTraceStack(location, params);
1274 for(int i = 0; i < count; ++i)
1276 if(!mProgramUniforms1f.SetUniformValue(mCurrentProgram, location, v[i]))
1278 mGetErrorResult = GL_INVALID_OPERATION;
1284 inline void Uniform1i(GLint location, GLint x) override
1286 std::string params = std::to_string(x);
1288 AddUniformCallToTraceStack(location, params);
1290 if(!mProgramUniforms1i.SetUniformValue(mCurrentProgram, location, x))
1292 mGetErrorResult = GL_INVALID_OPERATION;
1296 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v) override
1298 std::ostringstream out;
1299 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1300 AddUniformCallToTraceStack(location, out.str());
1302 for(int i = 0; i < count; ++i)
1304 if(!mProgramUniforms1i.SetUniformValue(mCurrentProgram,
1308 mGetErrorResult = GL_INVALID_OPERATION;
1314 inline void Uniform2f(GLint location, GLfloat x, GLfloat y) override
1316 std::string params = std::to_string(x) + "," + std::to_string(y);
1317 AddUniformCallToTraceStack(location, params);
1319 if(!mProgramUniforms2f.SetUniformValue(mCurrentProgram,
1323 mGetErrorResult = GL_INVALID_OPERATION;
1327 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override
1329 std::ostringstream out;
1330 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1331 AddUniformCallToTraceStack(location, out.str());
1333 for(int i = 0; i < count; ++i)
1335 if(!mProgramUniforms2f.SetUniformValue(mCurrentProgram,
1337 Vector2(v[2 * i], v[2 * i + 1])))
1339 mGetErrorResult = GL_INVALID_OPERATION;
1345 inline void Uniform2i(GLint location, GLint x, GLint y) override
1347 std::string params = std::to_string(x) + "," + std::to_string(y);
1348 AddUniformCallToTraceStack(location, params);
1351 inline void Uniform2iv(GLint location, GLsizei count, const GLint* v) override
1353 std::ostringstream out;
1354 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1355 AddUniformCallToTraceStack(location, out.str());
1358 inline void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override
1360 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z);
1361 AddUniformCallToTraceStack(location, params);
1363 if(!mProgramUniforms3f.SetUniformValue(mCurrentProgram,
1367 mGetErrorResult = GL_INVALID_OPERATION;
1371 inline void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) override
1373 std::ostringstream out;
1374 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1375 AddUniformCallToTraceStack(location, out.str());
1377 for(int i = 0; i < count; ++i)
1379 if(!mProgramUniforms3f.SetUniformValue(
1382 Vector3(v[3 * i], v[3 * i + 1], v[3 * i + 2])))
1384 mGetErrorResult = GL_INVALID_OPERATION;
1390 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z) override
1392 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z);
1393 AddUniformCallToTraceStack(location, params);
1396 inline void Uniform3iv(GLint location, GLsizei count, const GLint* v) override
1398 std::ostringstream out;
1399 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1400 AddUniformCallToTraceStack(location, out.str());
1403 inline void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) override
1405 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z) + "," + std::to_string(w);
1406 AddUniformCallToTraceStack(location, params);
1408 if(!mProgramUniforms4f.SetUniformValue(mCurrentProgram,
1410 Vector4(x, y, z, w)))
1412 mGetErrorResult = GL_INVALID_OPERATION;
1416 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override
1418 std::ostringstream out;
1419 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1420 AddUniformCallToTraceStack(location, out.str());
1422 for(int i = 0; i < count; ++i)
1424 if(!mProgramUniforms4f.SetUniformValue(
1427 Vector4(v[4 * i], v[4 * i + 1], v[4 * i + 2], v[4 * i + 3])))
1429 mGetErrorResult = GL_INVALID_OPERATION;
1435 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override
1437 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z) + "," + std::to_string(w);
1438 AddUniformCallToTraceStack(location, params);
1441 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v) override
1443 std::ostringstream out;
1444 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1445 AddUniformCallToTraceStack(location, out.str());
1448 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1450 std::ostringstream out;
1451 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << value[i];
1452 AddUniformCallToTraceStack(location, out.str());
1455 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1457 std::ostringstream out;
1458 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << value[i];
1459 AddUniformCallToTraceStack(location, out.str());
1461 for(int i = 0; i < count; ++i)
1463 if(!mProgramUniformsMat3.SetUniformValue(
1466 Matrix3(value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8])))
1468 mGetErrorResult = GL_INVALID_OPERATION;
1474 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1476 std::ostringstream out;
1477 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << value[i];
1478 AddUniformCallToTraceStack(location, out.str());
1480 for(int i = 0; i < count; ++i)
1482 if(!mProgramUniformsMat4.SetUniformValue(
1487 mGetErrorResult = GL_INVALID_OPERATION;
1493 inline void UseProgram(GLuint program) override
1495 mCurrentProgram = program;
1498 inline void ValidateProgram(GLuint program) override
1502 inline void VertexAttrib1f(GLuint indx, GLfloat x) override
1506 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values) override
1510 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override
1514 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values) override
1518 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override
1522 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values) override
1526 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) override
1530 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values) override
1534 inline void VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) override
1536 TraceCallStack::NamedParams namedParams;
1537 namedParams["index"] << index;
1538 namedParams["size"] << size;
1539 namedParams["type"] << std::hex << type;
1540 namedParams["normalized"] << (normalized ? "T" : "F");
1541 namedParams["stride"] << stride;
1542 namedParams["offset"] << std::to_string(reinterpret_cast<unsigned long>(ptr));
1544 mBufferTrace.PushCall("VertexAttribPointer", namedParams.str(), namedParams);
1547 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override
1549 std::string commaString(", ");
1550 std::string params(std::to_string(x) + commaString + std::to_string(y) + commaString + std::to_string(width) + commaString + std::to_string(height));
1552 mViewportTrace.PushCall("Viewport", params);
1557 inline void ReadBuffer(GLenum mode) override
1561 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices) override
1565 inline void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) override
1569 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) override
1573 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
1577 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) override
1581 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) override
1585 inline void GenQueries(GLsizei n, GLuint* ids) override
1589 inline void DeleteQueries(GLsizei n, const GLuint* ids) override
1593 inline GLboolean IsQuery(GLuint id) override
1598 inline void BeginQuery(GLenum target, GLuint id) override
1602 inline void EndQuery(GLenum target) override
1606 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params) override
1610 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) override
1614 inline GLboolean UnmapBuffer(GLenum target) override
1618 free(mMappedBuffer);
1619 mMappedBuffer = nullptr;
1621 return true; // false indicates corruption, nothing else.
1624 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params) override
1628 inline void DrawBuffers(GLsizei n, const GLenum* bufs) override
1632 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1636 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1640 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1644 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1648 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1652 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1656 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) override
1660 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) override
1664 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) override
1668 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) override
1670 mMappedBuffer = reinterpret_cast<GLvoid*>(malloc(offset + length));
1671 return mMappedBuffer;
1674 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) override
1678 inline void BindVertexArray(GLuint array) override
1682 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays) override
1686 inline void GenVertexArrays(GLsizei n, GLuint* arrays) override
1690 inline GLboolean IsVertexArray(GLuint array) override
1695 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data) override
1699 inline void BeginTransformFeedback(GLenum primitiveMode) override
1703 inline void EndTransformFeedback(void) override
1707 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) override
1711 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override
1715 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) override
1719 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) override
1723 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) override
1727 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override
1731 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override
1735 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) override
1739 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) override
1743 inline void VertexAttribI4iv(GLuint index, const GLint* v) override
1747 inline void VertexAttribI4uiv(GLuint index, const GLuint* v) override
1751 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params) override
1755 inline GLint GetFragDataLocation(GLuint program, const GLchar* name) override
1760 inline void Uniform1ui(GLint location, GLuint v0) override
1764 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1) override
1768 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) override
1772 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) override
1776 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value) override
1780 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value) override
1784 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value) override
1788 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value) override
1792 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) override
1796 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) override
1800 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) override
1804 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override
1808 inline const GLubyte* GetStringi(GLenum name, GLuint index) override
1813 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) override
1817 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) override
1821 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) override
1825 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) override
1827 return GL_INVALID_INDEX;
1830 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) override
1834 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) override
1838 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) override
1842 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override
1846 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) override
1850 inline GLsync FenceSync(GLenum condition, GLbitfield flags) override
1855 inline GLboolean IsSync(GLsync sync) override
1860 inline void DeleteSync(GLsync sync) override
1864 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
1869 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
1873 inline void GetInteger64v(GLenum pname, GLint64* params) override
1877 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) override
1881 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data) override
1885 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) override
1889 inline void GenSamplers(GLsizei count, GLuint* samplers) override
1893 inline void DeleteSamplers(GLsizei count, const GLuint* samplers) override
1897 inline GLboolean IsSampler(GLuint sampler) override
1902 inline void BindSampler(GLuint unit, GLuint sampler) override
1906 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override
1910 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) override
1914 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override
1918 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) override
1922 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) override
1926 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) override
1930 inline void VertexAttribDivisor(GLuint index, GLuint divisor) override
1934 inline void BindTransformFeedback(GLenum target, GLuint id) override
1938 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override
1942 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids) override
1946 inline GLboolean IsTransformFeedback(GLuint id) override
1951 inline void PauseTransformFeedback(void) override
1955 inline void ResumeTransformFeedback(void) override
1959 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override
1961 mGetProgramBinaryCalled = true;
1964 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) override
1968 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value) override
1972 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) override
1976 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) override
1980 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) override
1984 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) override
1988 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) override
1992 inline void BlendBarrier(void)
1997 inline void AddUniformCallToTraceStack(GLint location, const std::string& value)
1999 std::string name = "<not found>";
2000 bool matched = false;
2002 UniformIDMap& map = mUniforms[mCurrentProgram];
2003 for(UniformIDMap::iterator it = map.begin(); it != map.end(); ++it)
2005 if(it->second == location)
2015 mSetUniformTrace.PushCall(name, value);
2019 public: // TEST FUNCTIONS
2020 inline void SetCompileStatus(GLuint value)
2022 mCompileStatus = value;
2024 inline void SetLinkStatus(GLuint value)
2026 mLinkStatus = value;
2028 inline void SetAttribLocations(std::vector<std::string> locs)
2032 inline void SetGetErrorResult(GLenum result)
2034 mGetErrorResult = result;
2036 inline void SetGetStringResult(GLubyte* result)
2038 mGetStringResult = result;
2040 inline void SetIsBufferResult(GLboolean result)
2042 mIsBufferResult = result;
2044 inline void SetIsEnabledResult(GLboolean result)
2046 mIsEnabledResult = result;
2048 inline void SetIsFramebufferResult(GLboolean result)
2050 mIsFramebufferResult = result;
2052 inline void SetIsProgramResult(GLboolean result)
2054 mIsProgramResult = result;
2056 inline void SetIsRenderbufferResult(GLboolean result)
2058 mIsRenderbufferResult = result;
2060 inline void SetIsShaderResult(GLboolean result)
2062 mIsShaderResult = result;
2064 inline void SetIsTextureResult(GLboolean result)
2066 mIsTextureResult = result;
2068 inline void SetCheckFramebufferStatusResult(GLenum result)
2070 mCheckFramebufferStatusResult = result;
2072 inline void SetNumBinaryFormats(GLint numFormats)
2074 mNumBinaryFormats = numFormats;
2076 inline void SetBinaryFormats(GLint binaryFormats)
2078 mBinaryFormats = binaryFormats;
2080 inline void SetProgramBinaryLength(GLint length)
2082 mProgramBinaryLength = length;
2085 inline bool GetVertexAttribArrayState(GLuint index)
2087 if(index >= MAX_ATTRIBUTE_CACHE_SIZE)
2092 return mVertexAttribArrayState[index];
2094 inline void ClearVertexAttribArrayChanged()
2096 mVertexAttribArrayChanged = false;
2098 inline bool GetVertexAttribArrayChanged()
2100 return mVertexAttribArrayChanged;
2103 //Methods for CullFace verification
2104 inline void EnableCullFaceCallTrace(bool enable)
2106 mCullFaceTrace.Enable(enable);
2108 inline void ResetCullFaceCallStack()
2110 mCullFaceTrace.Reset();
2112 inline TraceCallStack& GetCullFaceTrace()
2114 return mCullFaceTrace;
2117 //Methods for Enable/Disable call verification
2118 inline void EnableEnableDisableCallTrace(bool enable)
2120 mEnableDisableTrace.Enable(enable);
2122 inline void ResetEnableDisableCallStack()
2124 mEnableDisableTrace.Reset();
2126 inline TraceCallStack& GetEnableDisableTrace()
2128 return mEnableDisableTrace;
2131 //Methods for Shader verification
2132 inline void EnableShaderCallTrace(bool enable)
2134 mShaderTrace.Enable(enable);
2136 inline void ResetShaderCallStack()
2138 mShaderTrace.Reset();
2140 inline TraceCallStack& GetShaderTrace()
2142 return mShaderTrace;
2145 //Methods for Texture verification
2146 inline void EnableTextureCallTrace(bool enable)
2148 mTextureTrace.Enable(enable);
2150 inline void ResetTextureCallStack()
2152 mTextureTrace.Reset();
2154 inline TraceCallStack& GetTextureTrace()
2156 return mTextureTrace;
2159 //Methods for Texture verification
2160 inline void EnableTexParameterCallTrace(bool enable)
2162 mTexParameterTrace.Enable(enable);
2164 inline void ResetTexParameterCallStack()
2166 mTexParameterTrace.Reset();
2168 inline TraceCallStack& GetTexParameterTrace()
2170 return mTexParameterTrace;
2173 //Methods for Draw verification
2174 inline void EnableDrawCallTrace(bool enable)
2176 mDrawTrace.Enable(enable);
2178 inline void ResetDrawCallStack()
2182 inline TraceCallStack& GetDrawTrace()
2187 //Methods for Depth function verification
2188 inline void EnableDepthFunctionCallTrace(bool enable)
2190 mDepthFunctionTrace.Enable(enable);
2192 inline void ResetDepthFunctionCallStack()
2194 mDepthFunctionTrace.Reset();
2196 inline TraceCallStack& GetDepthFunctionTrace()
2198 return mDepthFunctionTrace;
2201 //Methods for Stencil function verification
2202 inline void EnableStencilFunctionCallTrace(bool enable)
2204 mStencilFunctionTrace.Enable(enable);
2206 inline void ResetStencilFunctionCallStack()
2208 mStencilFunctionTrace.Reset();
2210 inline TraceCallStack& GetStencilFunctionTrace()
2212 return mStencilFunctionTrace;
2215 //Methods for Scissor verification
2216 inline void EnableScissorCallTrace(bool enable)
2218 mScissorTrace.Enable(enable);
2220 inline void ResetScissorCallStack()
2222 mScissorTrace.Reset();
2224 inline TraceCallStack& GetScissorTrace()
2226 return mScissorTrace;
2229 //Methods for Uniform function verification
2230 inline void EnableSetUniformCallTrace(bool enable)
2232 mSetUniformTrace.Enable(enable);
2234 inline void ResetSetUniformCallStack()
2236 mSetUniformTrace.Reset();
2238 inline TraceCallStack& GetSetUniformTrace()
2240 return mSetUniformTrace;
2243 //Methods for Viewport verification
2244 inline void EnableViewportCallTrace(bool enable)
2246 mViewportTrace.Enable(enable);
2248 inline void ResetViewportCallStack()
2250 mViewportTrace.Reset();
2252 inline TraceCallStack& GetViewportTrace()
2254 return mViewportTrace;
2256 inline TraceCallStack& GetBufferTrace()
2258 return mBufferTrace;
2261 template<typename T>
2262 inline bool GetUniformValue(const char* name, T& value) const
2264 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2265 program_it != mUniforms.end();
2268 const UniformIDMap& uniformIDs = program_it->second;
2270 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2271 if(uniform_it != uniformIDs.end())
2273 // found one matching uniform name, lets check the value...
2274 GLuint programId = program_it->first;
2275 GLint uniformId = uniform_it->second;
2277 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(value);
2278 return mProgramUniforms.GetUniformValue(programId, uniformId, value);
2284 template<typename T>
2285 inline bool CheckUniformValue(const char* name, const T& value) const
2287 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2288 program_it != mUniforms.end();
2291 const UniformIDMap& uniformIDs = program_it->second;
2293 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2294 if(uniform_it != uniformIDs.end())
2296 // found one matching uniform name, lets check the value...
2297 GLuint programId = program_it->first;
2298 GLint uniformId = uniform_it->second;
2300 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(value);
2301 if(mProgramUniforms.CheckUniformValue(programId, uniformId, value))
2303 // the value matches
2309 fprintf(stderr, "%s Not found, printing possible values:\n", name);
2310 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2311 program_it != mUniforms.end();
2314 const UniformIDMap& uniformIDs = program_it->second;
2316 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2317 if(uniform_it != uniformIDs.end())
2319 // found one matching uniform name, lets check the value...
2320 GLuint programId = program_it->first;
2321 GLint uniformId = uniform_it->second;
2323 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(value);
2325 if(mProgramUniforms.GetUniformValue(programId, uniformId, origValue))
2327 std::stringstream out;
2328 out << "Program: " << programId << ", " << uniform_it->first << ": " << origValue;
2329 fprintf(stderr, "%s\n", out.str().c_str());
2336 template<typename T>
2337 inline bool GetUniformValue(GLuint programId, GLuint uniformId, T& outValue) const
2339 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(outValue);
2340 return mProgramUniforms.GetUniformValue(programId, uniformId, outValue);
2343 inline bool GetUniformIds(const char* name, GLuint& programId, GLuint& uniformId) const
2345 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2346 program_it != mUniforms.end();
2349 const UniformIDMap& uniformIDs = program_it->second;
2351 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2352 if(uniform_it != uniformIDs.end())
2354 programId = program_it->first;
2355 uniformId = uniform_it->second;
2362 inline void SetCustomUniforms(std::vector<UniformData>& customUniformData)
2364 mCustomUniformData = customUniformData;
2367 inline GLuint GetLastShaderCompiled() const
2369 return mLastShaderCompiled;
2372 inline GLuint GetLastProgramCreated() const
2374 return mLastProgramIdUsed;
2377 inline GLbitfield GetLastClearMask() const
2379 return mLastClearBitMask;
2384 ATTRIB_UNKNOWN = -1,
2389 ATTRIB_BONE_WEIGHTS,
2390 ATTRIB_BONE_INDICES,
2394 struct ScissorParams
2410 // Methods to check scissor tests
2411 inline const ScissorParams& GetScissorParams() const
2413 return mScissorParams;
2416 struct ColorMaskParams
2432 inline bool GetProgramBinaryCalled() const
2434 return mGetProgramBinaryCalled;
2437 inline unsigned int GetClearCountCalled() const
2442 inline const ColorMaskParams& GetColorMaskParams() const
2444 return mColorMaskParams;
2447 typedef std::vector<size_t> BufferDataCalls;
2448 inline const BufferDataCalls& GetBufferDataCalls() const
2450 return mBufferDataCalls;
2452 inline void ResetBufferDataCalls()
2454 mBufferDataCalls.clear();
2457 typedef std::vector<size_t> BufferSubDataCalls;
2458 inline const BufferSubDataCalls& GetBufferSubDataCalls() const
2460 return mBufferSubDataCalls;
2462 inline void ResetBufferSubDataCalls()
2464 mBufferSubDataCalls.clear();
2468 GLuint mCurrentProgram;
2469 GLuint mCompileStatus;
2470 BufferDataCalls mBufferDataCalls;
2471 BufferSubDataCalls mBufferSubDataCalls;
2472 GLvoid* mMappedBuffer{nullptr};
2474 GLint mNumberOfActiveUniforms;
2475 GLenum mGetErrorResult;
2476 GLubyte* mGetStringResult;
2477 GLboolean mIsBufferResult;
2478 GLboolean mIsEnabledResult;
2479 GLboolean mIsFramebufferResult;
2480 GLboolean mIsProgramResult;
2481 GLboolean mIsRenderbufferResult;
2482 GLboolean mIsShaderResult;
2483 GLboolean mIsTextureResult;
2484 GLenum mActiveTextureUnit;
2485 GLenum mCheckFramebufferStatusResult;
2486 GLint mFramebufferStatus;
2487 GLenum mFramebufferDepthAttached;
2488 GLenum mFramebufferStencilAttached;
2489 GLuint mFramebufferColorAttachmentCount;
2490 GLuint mFrameBufferColorStatus;
2491 GLint mNumBinaryFormats;
2492 GLint mBinaryFormats;
2493 GLint mProgramBinaryLength;
2494 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
2495 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
2496 bool mGetProgramBinaryCalled;
2497 typedef std::map<GLuint, std::string> ShaderSourceMap;
2498 ShaderSourceMap mShaderSources;
2499 std::vector<std::string> mAttribLocs; // should be bound to shader
2500 GLuint mLastShaderCompiled;
2501 GLbitfield mLastClearBitMask;
2502 Vector4 mLastClearColor;
2503 unsigned int mClearCount;
2505 Vector4 mLastBlendColor;
2506 GLenum mLastBlendEquationRgb;
2507 GLenum mLastBlendEquationAlpha;
2508 GLenum mLastBlendFuncSrcRgb;
2509 GLenum mLastBlendFuncDstRgb;
2510 GLenum mLastBlendFuncSrcAlpha;
2511 GLenum mLastBlendFuncDstAlpha;
2513 GLboolean mLastDepthMask;
2515 // Data for manipulating the IDs returned by GenTextures
2516 GLuint mLastAutoTextureIdUsed;
2517 GLuint mNumGeneratedTextures;
2518 std::vector<GLuint> mNextTextureIds;
2519 std::vector<GLuint> mDeletedTextureIds;
2520 std::vector<GLuint> mBoundTextures;
2522 struct ActiveTextureType
2524 std::vector<GLuint> mBoundTextures;
2527 ActiveTextureType mActiveTextures[MIN_TEXTURE_UNIT_LIMIT];
2529 TraceCallStack mBufferTrace;
2530 TraceCallStack mCullFaceTrace;
2531 TraceCallStack mEnableDisableTrace;
2532 TraceCallStack mShaderTrace;
2533 TraceCallStack mTextureTrace;
2534 TraceCallStack mTexParameterTrace;
2535 TraceCallStack mDrawTrace;
2536 TraceCallStack mDepthFunctionTrace;
2537 TraceCallStack mStencilFunctionTrace;
2538 TraceCallStack mScissorTrace;
2539 TraceCallStack mSetUniformTrace;
2540 TraceCallStack mViewportTrace;
2542 // Shaders & Uniforms
2543 GLuint mLastShaderIdUsed;
2544 GLuint mLastProgramIdUsed{0u};
2545 GLuint mLastUniformIdUsed;
2546 typedef std::map<std::string, GLint> UniformIDMap;
2547 typedef std::map<GLuint, UniformIDMap> ProgramUniformMap;
2548 ProgramUniformMap mUniforms;
2550 std::vector<UniformData> mCustomUniformData{};
2552 template<typename T>
2553 struct ProgramUniformValue : public std::map<GLuint, std::map<GLint, T> >
2556 typedef std::map<GLint, T> UniformValueMap;
2557 typedef std::map<GLuint, UniformValueMap> Map;
2559 bool SetUniformValue(GLuint program, GLuint uniform, const T& value)
2566 typename Map::iterator it = Map::find(program);
2567 if(it == Map::end())
2569 // if its the first uniform for this program add it
2570 std::pair<typename Map::iterator, bool> result =
2571 Map::insert(typename Map::value_type(program, UniformValueMap()));
2575 UniformValueMap& uniforms = it->second;
2576 uniforms[uniform] = value;
2581 bool CheckUniformValue(GLuint program, GLuint uniform, const T& value) const
2584 if(GetUniformValue(program, uniform, uniformValue))
2586 return CompareType<T>(value, uniformValue, Math::MACHINE_EPSILON_10);
2592 bool GetUniformValue(GLuint program, GLuint uniform, T& value) const
2599 typename Map::const_iterator it = Map::find(program);
2600 if(it == Map::end())
2602 // Uniform values always initialised as 0
2607 const UniformValueMap& uniforms = it->second;
2608 typename UniformValueMap::const_iterator it2 = uniforms.find(uniform);
2609 if(it2 == uniforms.end())
2611 // Uniform values always initialised as 0
2615 value = it2->second;
2622 ProgramUniformValue<int> mProgramUniforms1i;
2623 ProgramUniformValue<float> mProgramUniforms1f;
2624 ProgramUniformValue<Vector2> mProgramUniforms2f;
2625 ProgramUniformValue<Vector3> mProgramUniforms3f;
2626 ProgramUniformValue<Vector4> mProgramUniforms4f;
2627 ProgramUniformValue<Matrix> mProgramUniformsMat4;
2628 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
2630 inline const ProgramUniformValue<int>& GetProgramUniformsForType(const int) const
2632 return mProgramUniforms1i;
2634 inline const ProgramUniformValue<float>& GetProgramUniformsForType(const float) const
2636 return mProgramUniforms1f;
2638 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType(const Vector2&) const
2640 return mProgramUniforms2f;
2642 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType(const Vector3&) const
2644 return mProgramUniforms3f;
2646 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType(const Vector4&) const
2648 return mProgramUniforms4f;
2650 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType(const Matrix&) const
2652 return mProgramUniformsMat4;
2654 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType(const Matrix3&) const
2656 return mProgramUniformsMat3;
2658 inline void SetVertexAttribArray(GLuint index, bool state)
2660 if(index >= MAX_ATTRIBUTE_CACHE_SIZE)
2665 mVertexAttribArrayState[index] = state;
2666 mVertexAttribArrayChanged = true;
2669 ScissorParams mScissorParams;
2670 ColorMaskParams mColorMaskParams;
2674 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
2680 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
2686 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
2688 return Vector2::ZERO;
2692 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
2694 return Vector3::ZERO;
2698 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
2700 return Vector4::ZERO;
2704 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
2710 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
2712 return Matrix3(Matrix());
2717 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2718 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2720 #endif // TEST_GL_ABSTRACTION_H