1 #ifndef TEST_GL_ABSTRACTION_H
2 #define TEST_GL_ABSTRACTION_H
5 * Copyright (c) 2024 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>
45 UniformData(const std::string& name, Property::Type type = Property::Type::NONE)
59 class DALI_CORE_API TestGlAbstraction : public Dali::Integration::GlAbstraction
62 static const int MAX_ATTRIBUTE_CACHE_SIZE{64};
65 ~TestGlAbstraction() override;
68 void PreRender() override;
69 void PostRender() override;
71 bool IsSurfacelessContextSupported() const override;
73 bool IsAdvancedBlendEquationSupported() override;
75 bool IsMultisampledRenderToTextureSupported() override;
77 bool IsBlendEquationSupported(DevelBlendEquation::Type blendEquation) override;
79 uint32_t GetShaderLanguageVersion();
81 std::string GetShaderVersionPrefix();
83 std::string GetVertexShaderPrefix();
85 std::string GetFragmentShaderPrefix();
87 bool TextureRequiresConverting(const GLenum imageGlFormat, const GLenum textureGlFormat, const bool isSubImage) const override;
91 inline void ActiveTexture(GLenum textureUnit) override
93 mActiveTextureUnit = textureUnit - GL_TEXTURE0;
96 inline GLenum GetActiveTextureUnit() const
98 return mActiveTextureUnit + GL_TEXTURE0;
101 inline void AttachShader(GLuint program, GLuint shader) override
103 std::stringstream out;
104 out << program << ", " << shader;
106 TraceCallStack::NamedParams namedParams;
107 namedParams["program"] << program;
108 namedParams["shader"] << shader;
109 mShaderTrace.PushCall("AttachShader", out.str(), namedParams);
112 inline void BindAttribLocation(GLuint program, GLuint index, const char* name) override
116 inline void BindBuffer(GLenum target, GLuint buffer) override
118 std::ostringstream o;
119 o << std::hex << target << ", " << buffer;
120 TraceCallStack::NamedParams namedParams;
121 namedParams["target"] << target;
122 namedParams["buffer"] << buffer;
123 mBufferTrace.PushCall("BindBuffer", o.str(), namedParams);
126 inline void BindFramebuffer(GLenum target, GLuint framebuffer) override
129 mFramebufferStatus |= 2;
132 inline void BindRenderbuffer(GLenum target, GLuint renderbuffer) override
137 * This method can be used by test cases, to query the texture IDs that have been bound by BindTexture.
138 * @return A vector containing the IDs that were bound.
140 inline const std::vector<GLuint>& GetBoundTextures() const
142 return mBoundTextures;
146 * Query the texture IDs that have been bound with BindTexture, with a specific active texture unit.
147 * @param[in] activeTextureUnit The specific active texture unit.
148 * @return A vector containing the IDs that were bound.
150 inline const std::vector<GLuint>& GetBoundTextures(GLuint activeTextureUnit) const
152 return mActiveTextures[activeTextureUnit - GL_TEXTURE0].mBoundTextures;
156 * This method can be used by test cases, to clear the record of texture IDs that have been bound by BindTexture.
158 inline void ClearBoundTextures()
160 mBoundTextures.clear();
162 for(unsigned int i = 0; i < MIN_TEXTURE_UNIT_LIMIT; ++i)
164 mActiveTextures[i].mBoundTextures.clear();
168 inline void BindTexture(GLenum target, GLuint texture) override
170 // Record the bound textures for future checks
173 mBoundTextures.push_back(texture);
175 if(mActiveTextureUnit < MIN_TEXTURE_UNIT_LIMIT)
177 mActiveTextures[mActiveTextureUnit].mBoundTextures.push_back(texture);
181 std::stringstream out;
182 out << std::hex << target << ", " << std::dec << texture;
184 TraceCallStack::NamedParams namedParams;
185 namedParams["target"] << std::hex << target;
186 namedParams["texture"] << texture;
188 mTextureTrace.PushCall("BindTexture", out.str(), namedParams);
191 inline void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) override
193 mLastBlendColor.r = red;
194 mLastBlendColor.g = green;
195 mLastBlendColor.b = blue;
196 mLastBlendColor.a = alpha;
199 inline const Vector4& GetLastBlendColor() const
201 return mLastBlendColor;
204 inline void BlendEquation(GLenum mode) override
206 mLastBlendEquationRgb = mode;
207 mLastBlendEquationAlpha = mode;
210 inline void BlendEquationSeparate(GLenum modeRgb, GLenum modeAlpha) override
212 mLastBlendEquationRgb = modeRgb;
213 mLastBlendEquationAlpha = modeAlpha;
216 inline GLenum GetLastBlendEquationRgb() const
218 return mLastBlendEquationRgb;
221 inline GLenum GetLastBlendEquationAlpha() const
223 return mLastBlendEquationAlpha;
226 inline void BlendFunc(GLenum sfactor, GLenum dfactor) override
228 mLastBlendFuncSrcRgb = sfactor;
229 mLastBlendFuncDstRgb = dfactor;
230 mLastBlendFuncSrcAlpha = sfactor;
231 mLastBlendFuncDstAlpha = dfactor;
234 inline void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) override
236 mLastBlendFuncSrcRgb = srcRGB;
237 mLastBlendFuncDstRgb = dstRGB;
238 mLastBlendFuncSrcAlpha = srcAlpha;
239 mLastBlendFuncDstAlpha = dstAlpha;
242 inline GLenum GetLastBlendFuncSrcRgb() const
244 return mLastBlendFuncSrcRgb;
247 inline GLenum GetLastBlendFuncDstRgb() const
249 return mLastBlendFuncDstRgb;
252 inline GLenum GetLastBlendFuncSrcAlpha() const
254 return mLastBlendFuncSrcAlpha;
257 inline GLenum GetLastBlendFuncDstAlpha() const
259 return mLastBlendFuncDstAlpha;
262 inline void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage) override
264 std::ostringstream o;
265 o << std::hex << target << ", " << size << ", " << data << ", " << usage;
266 TraceCallStack::NamedParams namedParams;
267 namedParams["target"] << std::hex << target;
268 namedParams["size"] << size;
269 namedParams["usage"] << usage;
271 mBufferTrace.PushCall("BufferData", o.str(), namedParams);
273 mBufferDataCalls.push_back(size);
276 inline void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data) override
278 std::ostringstream o;
279 o << std::hex << target << ", " << offset << ", " << size << ", " << data;
280 TraceCallStack::NamedParams namedParams;
281 namedParams["target"] << std::hex << target;
282 namedParams["offset"] << offset;
283 namedParams["size"] << size;
284 mBufferTrace.PushCall("BufferSubData", o.str());
286 mBufferSubDataCalls.push_back(size);
289 inline GLenum CheckFramebufferStatus(GLenum target) override
291 //If it has the three last bits set to 1 - 111, then the three minimum functions to create a
292 //Framebuffer texture have been called
293 if(mFramebufferStatus == 7)
295 return GL_FRAMEBUFFER_COMPLETE;
298 return mCheckFramebufferStatusResult;
301 inline GLuint CheckFramebufferColorAttachmentCount()
303 return mFramebufferColorAttachmentCount;
306 inline GLuint CheckFramebufferDepthAttachmentCount()
308 return mFramebufferDepthAttachmentCount;
311 inline GLuint CheckFramebufferStencilAttachmentCount()
313 return mFramebufferStencilAttachmentCount;
316 inline GLuint CheckFramebufferDepthStencilAttachmentCount()
318 return mFramebufferDepthStencilAttachmentCount;
321 inline GLenum CheckFramebufferDepthAttachment()
323 return mFramebufferDepthAttached;
326 inline GLenum CheckFramebufferStencilAttachment()
328 return mFramebufferStencilAttached;
331 inline GLenum CheckFramebufferDepthStencilAttachment()
333 return mFramebufferDepthStencilAttached;
336 inline void Clear(GLbitfield mask) override
339 mLastClearBitMask = mask;
342 inline void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) override
344 mLastClearColor.r = red;
345 mLastClearColor.g = green;
346 mLastClearColor.b = blue;
347 mLastClearColor.a = alpha;
350 inline const Vector4& GetLastClearColor() const
352 return mLastClearColor;
355 inline void ClearDepthf(GLclampf depth) override
359 inline void ClearStencil(GLint s) override
361 std::stringstream out;
364 TraceCallStack::NamedParams namedParams;
365 namedParams["s"] << s;
367 mStencilFunctionTrace.PushCall("ClearStencil", out.str(), namedParams);
370 inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) override
372 mColorMaskParams.red = red;
373 mColorMaskParams.green = green;
374 mColorMaskParams.blue = blue;
375 mColorMaskParams.alpha = alpha;
378 inline void CompileShader(GLuint shader) override
380 std::stringstream out;
382 TraceCallStack::NamedParams namedParams;
383 namedParams["shader"] << shader;
385 mShaderTrace.PushCall("CompileShader", out.str(), namedParams);
388 inline void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) override
390 std::stringstream out;
391 out << target << ", " << level << ", " << width << ", " << height;
393 TraceCallStack::NamedParams namedParams;
394 namedParams["target"] << std::hex << target;
395 namedParams["level"] << level;
396 namedParams["internalformat"] << internalformat;
397 namedParams["width"] << width;
398 namedParams["height"] << height;
399 namedParams["border"] << border;
400 namedParams["size"] << imageSize;
402 mTextureTrace.PushCall("CompressedTexImage2D", out.str(), namedParams);
405 inline void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) override
407 std::stringstream out;
408 out << target << ", " << level << ", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
410 TraceCallStack::NamedParams namedParams;
411 namedParams["target"] << std::hex << target;
412 namedParams["level"] << level;
413 namedParams["xoffset"] << xoffset;
414 namedParams["yoffset"] << yoffset;
415 namedParams["width"] << width;
416 namedParams["height"] << height;
417 mTextureTrace.PushCall("CompressedTexSubImage2D", out.str(), namedParams);
420 inline void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) override
424 inline void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
428 inline GLuint CreateProgram(void) override
430 mShaderTrace.PushCall("CreateProgram", "");
432 ++mLastProgramIdUsed;
433 mUniforms[mLastProgramIdUsed] = UniformIDMap();
434 return mLastProgramIdUsed;
437 inline GLuint CreateShader(GLenum type) override
439 std::stringstream out;
442 TraceCallStack::NamedParams namedParams;
443 namedParams["type"] << std::hex << type;
444 mShaderTrace.PushCall("CreateShader", out.str(), namedParams);
446 return ++mLastShaderIdUsed;
449 inline void CullFace(GLenum mode) override
451 std::stringstream out;
452 out << std::hex << mode;
454 TraceCallStack::NamedParams namedParams;
455 namedParams["mode"] << std::hex << mode;
457 mCullFaceTrace.PushCall("CullFace", out.str(), namedParams);
460 inline void DeleteBuffers(GLsizei n, const GLuint* buffers) override
464 inline void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override
468 inline void DeleteProgram(GLuint program) override
470 std::stringstream out;
473 TraceCallStack::NamedParams namedParams;
474 namedParams["program"] << program;
476 mShaderTrace.PushCall("DeleteProgram", out.str(), namedParams);
479 inline void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override
483 inline void DeleteShader(GLuint shader) override
485 std::stringstream out;
488 TraceCallStack::NamedParams namedParams;
489 namedParams["shader"] << shader;
491 mShaderTrace.PushCall("DeleteShader", out.str(), namedParams);
494 inline void DeleteTextures(GLsizei n, const GLuint* textures) override
496 std::stringstream out;
497 out << "n:" << n << " textures[";
499 TraceCallStack::NamedParams namedParams;
501 for(GLsizei i = 0; i < n; i++)
503 out << (i > 0 ? ", " : "") << textures[i];
504 std::stringstream paramName;
505 paramName << "texture[" << i << "]";
506 namedParams[paramName.str()] << textures[i];
507 mDeletedTextureIds.push_back(textures[i]);
508 mNumGeneratedTextures--;
512 mTextureTrace.PushCall("DeleteTextures", out.str(), namedParams);
515 inline bool CheckNoTexturesDeleted()
517 return mDeletedTextureIds.size() == 0;
520 inline bool CheckTextureDeleted(GLuint textureId)
524 for(std::vector<GLuint>::iterator iter = mDeletedTextureIds.begin(); iter != mDeletedTextureIds.end(); ++iter)
526 if(*iter == textureId)
535 inline void ClearDeletedTextures()
537 mDeletedTextureIds.clear();
540 inline void DepthFunc(GLenum func) override
542 std::stringstream out;
543 out << std::hex << func;
545 TraceCallStack::NamedParams namedParams;
546 namedParams["func"] << std::hex << func;
548 mDepthFunctionTrace.PushCall("DepthFunc", out.str(), namedParams);
551 inline void DepthMask(GLboolean flag) override
553 mLastDepthMask = flag;
556 inline bool GetLastDepthMask() const
558 return mLastDepthMask;
561 inline void DepthRangef(GLclampf zNear, GLclampf zFar) override
565 inline void DetachShader(GLuint program, GLuint shader) override
567 std::stringstream out;
568 out << program << ", " << shader;
569 TraceCallStack::NamedParams namedParams;
570 namedParams["program"] << program;
571 namedParams["shader"] << shader;
572 mShaderTrace.PushCall("DetachShader", out.str(), namedParams);
575 inline void Disable(GLenum cap) override
577 std::stringstream out;
578 out << std::hex << cap;
579 TraceCallStack::NamedParams namedParams;
580 namedParams["cap"] << std::hex << cap;
581 mEnableDisableTrace.PushCall("Disable", out.str(), namedParams);
584 inline void DisableVertexAttribArray(GLuint index) override
586 std::stringstream out;
588 TraceCallStack::NamedParams namedParams;
589 namedParams["index"] << index;
590 mBufferTrace.PushCall("DisableVertexAttribArray", out.str(), namedParams);
591 SetVertexAttribArray(index, false);
594 inline void DrawArrays(GLenum mode, GLint first, GLsizei count) override
596 std::stringstream out;
597 out << mode << ", " << first << ", " << count;
598 TraceCallStack::NamedParams namedParams;
599 namedParams["mode"] << std::hex << mode;
600 namedParams["first"] << first;
601 namedParams["count"] << count;
602 mDrawTrace.PushCall("DrawArrays", out.str(), namedParams);
605 inline void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices) override
607 std::stringstream out;
608 out << mode << ", " << count << ", " << type << ", indices";
610 TraceCallStack::NamedParams namedParams;
611 namedParams["mode"] << std::hex << mode;
612 namedParams["count"] << count;
613 namedParams["type"] << type;
614 // Skip void pointers - are they of any use?
615 mDrawTrace.PushCall("DrawElements", out.str(), namedParams);
618 inline void Enable(GLenum cap) override
620 std::stringstream out;
621 out << std::hex << cap;
622 TraceCallStack::NamedParams namedParams;
623 namedParams["cap"] << std::hex << cap;
624 mEnableDisableTrace.PushCall("Enable", out.str(), namedParams);
627 inline void EnableVertexAttribArray(GLuint index) override
629 std::stringstream out;
631 TraceCallStack::NamedParams namedParams;
632 namedParams["index"] << index;
633 mBufferTrace.PushCall("EnableVertexAttribArray", out.str(), namedParams);
634 SetVertexAttribArray(index, true);
637 inline void Finish(void) override
641 inline void Flush(void) override
645 inline void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) override
647 if(attachment == GL_DEPTH_ATTACHMENT)
649 mFramebufferDepthAttached = true;
651 else if(attachment == GL_STENCIL_ATTACHMENT)
653 mFramebufferStencilAttached = true;
655 else if(attachment == GL_DEPTH_STENCIL_ATTACHMENT)
657 mFramebufferStencilAttached = true;
658 mFramebufferDepthAttached = true;
659 mFramebufferDepthStencilAttached = true;
663 inline void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) override
666 mFramebufferStatus |= 4;
668 //We check 4 attachment colors
669 if((attachment >= GL_COLOR_ATTACHMENT0) && (attachment < GL_COLOR_ATTACHMENT0 + Dali::DevelFrameBuffer::MAX_COLOR_ATTACHMENTS))
671 uint8_t mask = 1 << (attachment - GL_COLOR_ATTACHMENT0);
672 if((mFrameBufferColorStatus & mask) == 0)
674 mFrameBufferColorStatus |= mask;
675 ++mFramebufferColorAttachmentCount;
678 else if(attachment == GL_DEPTH_ATTACHMENT)
680 ++mFramebufferDepthAttachmentCount;
682 else if(attachment == GL_STENCIL_ATTACHMENT)
684 ++mFramebufferStencilAttachmentCount;
686 else if(attachment == GL_DEPTH_STENCIL_ATTACHMENT)
688 ++mFramebufferDepthAttachmentCount;
689 ++mFramebufferStencilAttachmentCount;
690 ++mFramebufferDepthStencilAttachmentCount;
694 inline void FrontFace(GLenum mode) override
699 inline void GenBuffers(GLsizei n, GLuint* buffers) override
701 // avoids an assert in GpuBuffers
704 std::ostringstream o;
706 TraceCallStack::NamedParams namedParams;
707 namedParams["n"] << o.str();
708 mBufferTrace.PushCall("GenBuffers", o.str(), namedParams);
711 inline void GenerateMipmap(GLenum target) override
713 std::stringstream out;
715 TraceCallStack::NamedParams namedParams;
716 namedParams["target"] << std::hex << target;
718 mTextureTrace.PushCall("GenerateMipmap", out.str(), namedParams);
721 inline void GenFramebuffers(GLsizei n, GLuint* framebuffers) override
723 for(int i = 0; i < n; i++)
725 framebuffers[i] = i + 1;
728 //Add 001 bit, this function needs to be called the first one in the chain
729 mFramebufferStatus = 1;
732 inline void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override
734 for(int i = 0; i < n; i++)
736 renderbuffers[i] = i + 1;
741 * This method can be used by test cases, to manipulate the texture IDs generated by GenTextures.
742 * @param[in] ids A vector containing the next IDs to be generated
744 inline void SetNextTextureIds(const std::vector<GLuint>& ids)
746 mNextTextureIds = ids;
749 inline const std::vector<GLuint>& GetNextTextureIds()
751 return mNextTextureIds;
754 inline void GenTextures(GLsizei count, GLuint* textures) override
756 for(int i = 0; i < count; ++i)
758 if(!mNextTextureIds.empty())
760 *(textures + i) = mNextTextureIds[0];
761 mNextTextureIds.erase(mNextTextureIds.begin());
765 *(textures + i) = ++mLastAutoTextureIdUsed;
767 mNumGeneratedTextures++;
770 TraceCallStack::NamedParams namedParams;
771 namedParams["count"] << count;
773 std::stringstream out;
774 for(int i = 0; i < count; i++)
781 std::ostringstream oss;
782 oss << "indices[" << i << "]";
783 namedParams[oss.str()] << textures[i];
786 mTextureTrace.PushCall("GenTextures", out.str(), namedParams);
789 inline GLuint GetLastGenTextureId()
791 return mLastAutoTextureIdUsed;
794 inline GLuint GetNumGeneratedTextures()
796 return mNumGeneratedTextures;
799 inline void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) override
803 inline void SetActiveUniforms(const std::vector<ActiveUniform>& uniforms)
805 mActiveUniforms = uniforms;
808 inline void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) override
810 if(index < mActiveUniforms.size())
812 *length = snprintf(name, bufsize, "%s", mActiveUniforms[index].name.c_str());
813 *type = mActiveUniforms[index].type;
814 *size = mActiveUniforms[index].size;
818 inline void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) override
822 inline int GetAttribLocation(GLuint program, const char* name) override
824 std::string check(name);
825 auto iter = std::find(mAttribLocs.begin(), mAttribLocs.end(), check);
826 if(iter == mAttribLocs.end())
828 return iter - mAttribLocs.begin();
831 inline void GetBooleanv(GLenum pname, GLboolean* params) override
835 inline void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override
839 inline GLenum GetError(void) override
841 return mGetErrorResult;
844 inline void GetFloatv(GLenum pname, GLfloat* params) override
848 inline void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) override
852 inline void GetIntegerv(GLenum pname, GLint* params) override
856 case GL_MAX_TEXTURE_SIZE:
859 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
862 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
863 *params = mNumBinaryFormats;
865 case GL_PROGRAM_BINARY_FORMATS_OES:
866 *params = mBinaryFormats;
871 inline void GetProgramiv(GLuint program, GLenum pname, GLint* params) override
876 *params = mLinkStatus;
878 case GL_PROGRAM_BINARY_LENGTH_OES:
879 *params = mProgramBinaryLength;
881 case GL_ACTIVE_UNIFORMS:
882 *params = mActiveUniforms.size();
884 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
887 case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
893 inline void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) override
897 inline void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) override
901 inline void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override
905 case GL_COMPILE_STATUS:
906 *params = mCompileStatus;
911 inline void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) override
915 inline void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) override
919 inline const GLubyte* GetString(GLenum name) override
921 return mGetStringResult;
924 inline void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override
928 inline void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override
932 inline void GetUniformfv(GLuint program, GLint location, GLfloat* params) override
936 inline void GetUniformiv(GLuint program, GLint location, GLint* params) override
940 inline GLint GetUniformLocation(GLuint program, const char* name) override
942 ProgramUniformMap::iterator it = mUniforms.find(program);
943 if(it == mUniforms.end())
945 // Not a valid program ID
946 mGetErrorResult = GL_INVALID_OPERATION;
950 UniformIDMap& uniformIDs = it->second;
951 UniformIDMap::iterator it2 = uniformIDs.find(name);
952 if(it2 == uniformIDs.end())
954 // Uniform not found, so add it...
955 uniformIDs[name] = ++mLastUniformIdUsed;
956 return uniformIDs[name];
962 inline void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override
966 inline void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override
970 inline void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) override
974 inline void Hint(GLenum target, GLenum mode) override
978 inline GLboolean IsBuffer(GLuint buffer) override
980 return mIsBufferResult;
983 inline GLboolean IsEnabled(GLenum cap) override
985 return mIsEnabledResult;
988 inline GLboolean IsFramebuffer(GLuint framebuffer) override
990 return mIsFramebufferResult;
993 inline GLboolean IsProgram(GLuint program) override
995 return mIsProgramResult;
998 inline GLboolean IsRenderbuffer(GLuint renderbuffer) override
1000 return mIsRenderbufferResult;
1003 inline GLboolean IsShader(GLuint shader) override
1005 return mIsShaderResult;
1008 inline GLboolean IsTexture(GLuint texture) override
1010 return mIsTextureResult;
1013 inline void LineWidth(GLfloat width) override
1017 inline void LinkProgram(GLuint program) override
1019 std::stringstream out;
1022 TraceCallStack::NamedParams namedParams;
1023 namedParams["program"] << program;
1024 mShaderTrace.PushCall("LinkProgram", out.str(), namedParams);
1026 for(const auto& uniform : mActiveUniforms)
1028 GetUniformLocation(program, uniform.name.c_str());
1031 for(const auto& uniform : mCustomUniformData)
1033 auto iter = uniform.name.find("[");
1034 auto name = uniform.name;
1035 if(iter != std::string::npos)
1037 name = uniform.name.substr(0, iter);
1038 auto arrayCount = std::stoi(uniform.name.substr(iter + 1));
1039 iter = uniform.name.find("]");
1041 if(iter != std::string::npos && iter + 1 != uniform.name.length())
1043 suffix = uniform.name.substr(iter + 1); // If there is a suffix, it means its an element of an array of struct
1046 for(int i = 0; i < arrayCount; ++i)
1048 std::stringstream nss;
1049 nss << name << "[" << i << "]" << suffix;
1050 GetUniformLocation(program, nss.str().c_str()); // Generate a GL loc per element
1055 GetUniformLocation(program, name.c_str());
1060 inline void PixelStorei(GLenum pname, GLint param) override
1064 inline void PolygonOffset(GLfloat factor, GLfloat units) override
1068 inline void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) override
1072 inline void ReleaseShaderCompiler(void) override
1076 inline void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) override
1080 inline void SampleCoverage(GLclampf value, GLboolean invert) override
1084 inline void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override
1086 mScissorParams.x = x;
1087 mScissorParams.y = y;
1088 mScissorParams.width = width;
1089 mScissorParams.height = height;
1091 std::stringstream out;
1092 out << x << ", " << y << ", " << width << ", " << height;
1093 TraceCallStack::NamedParams namedParams;
1094 namedParams["x"] << x;
1095 namedParams["y"] << y;
1096 namedParams["width"] << width;
1097 namedParams["height"] << height;
1098 mScissorTrace.PushCall("Scissor", out.str(), namedParams);
1101 inline void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) override
1105 inline void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) override
1107 std::string stringBuilder;
1108 for(int i = 0; i < count; ++i)
1110 stringBuilder += string[i];
1112 mShaderSources[shader] = stringBuilder;
1113 mLastShaderCompiled = shader;
1116 inline void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) override
1118 const std::string shaderSource = mShaderSources[shader];
1119 const int shaderSourceLength = static_cast<int>(shaderSource.length());
1120 if(shaderSourceLength < bufsize)
1122 strncpy(source, shaderSource.c_str(), shaderSourceLength);
1123 *length = shaderSourceLength;
1127 *length = bufsize - 1;
1128 strncpy(source, shaderSource.c_str(), *length);
1129 source[*length] = 0x0;
1133 inline std::string GetShaderSource(GLuint shader)
1135 return mShaderSources[shader];
1138 inline void StencilFunc(GLenum func, GLint ref, GLuint mask) override
1140 std::stringstream out;
1141 out << func << ", " << ref << ", " << mask;
1143 TraceCallStack::NamedParams namedParams;
1144 namedParams["func"] << std::hex << func;
1145 namedParams["ref"] << ref;
1146 namedParams["mask"] << mask;
1148 mStencilFunctionTrace.PushCall("StencilFunc", out.str(), namedParams);
1151 inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) override
1153 std::stringstream out;
1154 out << face << ", " << func << ", " << ref << ", " << mask;
1156 TraceCallStack::NamedParams namedParams;
1157 namedParams["face"] << std::hex << face;
1158 namedParams["func"] << std::hex << func;
1159 namedParams["ref"] << ref;
1160 namedParams["mask"] << mask;
1162 mStencilFunctionTrace.PushCall("StencilFuncSeparate", out.str(), namedParams);
1165 inline void StencilMask(GLuint mask) override
1167 std::stringstream out;
1170 TraceCallStack::NamedParams namedParams;
1171 namedParams["mask"] << mask;
1173 mStencilFunctionTrace.PushCall("StencilMask", out.str(), namedParams);
1176 inline void StencilMaskSeparate(GLenum face, GLuint mask) override
1178 std::stringstream out;
1179 out << face << ", " << mask;
1181 TraceCallStack::NamedParams namedParams;
1182 namedParams["face"] << std::hex << face;
1183 namedParams["mask"] << mask;
1185 mStencilFunctionTrace.PushCall("StencilMaskSeparate", out.str(), namedParams);
1188 inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override
1190 std::stringstream out;
1191 out << fail << ", " << zfail << ", " << zpass;
1193 TraceCallStack::NamedParams namedParams;
1194 namedParams["fail"] << std::hex << fail;
1195 namedParams["zfail"] << std::hex << zfail;
1196 namedParams["zpass"] << std::hex << zpass;
1198 mStencilFunctionTrace.PushCall("StencilOp", out.str(), namedParams);
1201 inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) override
1203 std::stringstream out;
1204 out << face << ", " << fail << ", " << zfail << "," << zpass;
1206 TraceCallStack::NamedParams namedParams;
1207 namedParams["face"] << std::hex << face;
1208 namedParams["fail"] << std::hex << fail;
1209 namedParams["zfail"] << std::hex << zfail;
1210 namedParams["zpass"] << std::hex << zpass;
1212 mStencilFunctionTrace.PushCall("StencilOpSeparate", out.str(), namedParams);
1215 inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) override
1217 std::stringstream out;
1218 out << target << ", " << level << ", " << width << ", " << height;
1220 TraceCallStack::NamedParams namedParams;
1221 namedParams["target"] << std::hex << target;
1222 namedParams["level"] << level;
1223 namedParams["internalformat"] << internalformat;
1224 namedParams["width"] << width;
1225 namedParams["height"] << height;
1226 namedParams["border"] << border;
1227 namedParams["format"] << std::hex << format;
1228 namedParams["type"] << std::hex << type;
1230 mTextureTrace.PushCall("TexImage2D", out.str(), namedParams);
1233 inline void TexParameterf(GLenum target, GLenum pname, GLfloat param) override
1235 std::stringstream out;
1236 out << target << ", " << pname << ", " << param;
1238 TraceCallStack::NamedParams namedParams;
1239 namedParams["target"] << std::hex << target;
1240 namedParams["pname"] << std::hex << pname;
1241 namedParams["param"] << param;
1243 mTexParameterTrace.PushCall("TexParameterf", out.str(), namedParams);
1246 inline void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params) override
1248 std::stringstream out;
1249 out << target << ", " << pname << ", " << params[0];
1251 TraceCallStack::NamedParams namedParams;
1252 namedParams["target"] << std::hex << target;
1253 namedParams["pname"] << std::hex << pname;
1254 namedParams["params[0]"] << params[0];
1256 mTexParameterTrace.PushCall("TexParameterfv", out.str(), namedParams);
1259 inline void TexParameteri(GLenum target, GLenum pname, GLint param) override
1261 std::stringstream out;
1262 out << std::hex << target << ", " << pname << ", " << param;
1263 std::string params = out.str();
1265 TraceCallStack::NamedParams namedParams;
1266 namedParams["target"] << std::hex << target;
1267 namedParams["pname"] << std::hex << pname;
1268 namedParams["param"] << param;
1269 mTexParameterTrace.PushCall("TexParameteri", params, namedParams);
1272 inline void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override
1274 std::stringstream out;
1275 out << target << ", " << pname << ", " << params[0];
1276 TraceCallStack::NamedParams namedParams;
1277 namedParams["target"] << std::hex << target;
1278 namedParams["pname"] << std::hex << pname;
1279 namedParams["params[0]"] << params[0];
1280 mTexParameterTrace.PushCall("TexParameteriv", out.str(), namedParams);
1283 inline void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) override
1285 std::stringstream out;
1286 out << target << ", " << level << ", " << xoffset << ", " << yoffset << ", " << width << ", " << height;
1288 TraceCallStack::NamedParams namedParams;
1289 namedParams["target"] << std::hex << target;
1290 namedParams["level"] << level;
1291 namedParams["xoffset"] << xoffset;
1292 namedParams["yoffset"] << yoffset;
1293 namedParams["width"] << width;
1294 namedParams["height"] << height;
1295 mTextureTrace.PushCall("TexSubImage2D", out.str(), namedParams);
1298 inline void Uniform1f(GLint location, GLfloat value) override
1300 std::string params = std::to_string(value);
1301 AddUniformCallToTraceStack(location, params);
1303 if(!mProgramUniforms1f.SetUniformValue(mCurrentProgram, location, value))
1305 mGetErrorResult = GL_INVALID_OPERATION;
1309 inline void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override
1312 for(int i = 0; i < count; ++i)
1314 params = params + std::to_string(v[i]) + ",";
1317 AddUniformCallToTraceStack(location, params);
1319 for(int i = 0; i < count; ++i)
1321 if(!mProgramUniforms1f.SetUniformValue(mCurrentProgram, location, v[i]))
1323 mGetErrorResult = GL_INVALID_OPERATION;
1329 inline void Uniform1i(GLint location, GLint x) override
1331 std::string params = std::to_string(x);
1333 AddUniformCallToTraceStack(location, params);
1335 if(!mProgramUniforms1i.SetUniformValue(mCurrentProgram, location, x))
1337 mGetErrorResult = GL_INVALID_OPERATION;
1341 inline void Uniform1iv(GLint location, GLsizei count, const GLint* v) override
1343 std::ostringstream out;
1344 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1345 AddUniformCallToTraceStack(location, out.str());
1347 for(int i = 0; i < count; ++i)
1349 if(!mProgramUniforms1i.SetUniformValue(mCurrentProgram,
1353 mGetErrorResult = GL_INVALID_OPERATION;
1359 inline void Uniform2f(GLint location, GLfloat x, GLfloat y) override
1361 std::string params = std::to_string(x) + "," + std::to_string(y);
1362 AddUniformCallToTraceStack(location, params);
1364 if(!mProgramUniforms2f.SetUniformValue(mCurrentProgram,
1368 mGetErrorResult = GL_INVALID_OPERATION;
1372 inline void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override
1374 std::ostringstream out;
1375 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1376 AddUniformCallToTraceStack(location, out.str());
1378 for(int i = 0; i < count; ++i)
1380 if(!mProgramUniforms2f.SetUniformValue(mCurrentProgram,
1382 Vector2(v[2 * i], v[2 * i + 1])))
1384 mGetErrorResult = GL_INVALID_OPERATION;
1390 inline void Uniform2i(GLint location, GLint x, GLint y) override
1392 std::string params = std::to_string(x) + "," + std::to_string(y);
1393 AddUniformCallToTraceStack(location, params);
1396 inline void Uniform2iv(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 Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override
1405 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z);
1406 AddUniformCallToTraceStack(location, params);
1408 if(!mProgramUniforms3f.SetUniformValue(mCurrentProgram,
1412 mGetErrorResult = GL_INVALID_OPERATION;
1416 inline void Uniform3fv(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(!mProgramUniforms3f.SetUniformValue(
1427 Vector3(v[3 * i], v[3 * i + 1], v[3 * i + 2])))
1429 mGetErrorResult = GL_INVALID_OPERATION;
1435 inline void Uniform3i(GLint location, GLint x, GLint y, GLint z) override
1437 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z);
1438 AddUniformCallToTraceStack(location, params);
1441 inline void Uniform3iv(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 Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) override
1450 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z) + "," + std::to_string(w);
1451 AddUniformCallToTraceStack(location, params);
1453 if(!mProgramUniforms4f.SetUniformValue(mCurrentProgram,
1455 Vector4(x, y, z, w)))
1457 mGetErrorResult = GL_INVALID_OPERATION;
1461 inline void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override
1463 std::ostringstream out;
1464 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1465 AddUniformCallToTraceStack(location, out.str());
1467 for(int i = 0; i < count; ++i)
1469 if(!mProgramUniforms4f.SetUniformValue(
1472 Vector4(v[4 * i], v[4 * i + 1], v[4 * i + 2], v[4 * i + 3])))
1474 mGetErrorResult = GL_INVALID_OPERATION;
1480 inline void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override
1482 std::string params = std::to_string(x) + "," + std::to_string(y) + "," + std::to_string(z) + "," + std::to_string(w);
1483 AddUniformCallToTraceStack(location, params);
1486 inline void Uniform4iv(GLint location, GLsizei count, const GLint* v) override
1488 std::ostringstream out;
1489 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << v[i];
1490 AddUniformCallToTraceStack(location, out.str());
1493 inline void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1495 std::ostringstream out;
1496 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << value[i];
1497 AddUniformCallToTraceStack(location, out.str());
1500 inline void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1502 std::ostringstream out;
1503 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << value[i];
1504 AddUniformCallToTraceStack(location, out.str());
1506 for(int i = 0; i < count; ++i)
1508 if(!mProgramUniformsMat3.SetUniformValue(
1511 Matrix3(value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8])))
1513 mGetErrorResult = GL_INVALID_OPERATION;
1519 inline void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1521 std::ostringstream out;
1522 for(GLsizei i = 0; i < count; ++i) out << (!i ? "" : ", ") << value[i];
1523 AddUniformCallToTraceStack(location, out.str());
1525 for(int i = 0; i < count; ++i)
1527 if(!mProgramUniformsMat4.SetUniformValue(
1532 mGetErrorResult = GL_INVALID_OPERATION;
1538 inline void UseProgram(GLuint program) override
1540 mCurrentProgram = program;
1543 inline void ValidateProgram(GLuint program) override
1547 inline void VertexAttrib1f(GLuint indx, GLfloat x) override
1551 inline void VertexAttrib1fv(GLuint indx, const GLfloat* values) override
1555 inline void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override
1559 inline void VertexAttrib2fv(GLuint indx, const GLfloat* values) override
1563 inline void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override
1567 inline void VertexAttrib3fv(GLuint indx, const GLfloat* values) override
1571 inline void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) override
1575 inline void VertexAttrib4fv(GLuint indx, const GLfloat* values) override
1579 inline void VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) override
1581 TraceCallStack::NamedParams namedParams;
1582 namedParams["index"] << index;
1583 namedParams["size"] << size;
1584 namedParams["type"] << std::hex << type;
1585 namedParams["normalized"] << (normalized ? "T" : "F");
1586 namedParams["stride"] << stride;
1587 namedParams["offset"] << std::to_string(reinterpret_cast<unsigned long>(ptr));
1589 mBufferTrace.PushCall("VertexAttribPointer", namedParams.str(), namedParams);
1592 inline void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override
1594 std::string commaString(", ");
1595 std::string params(std::to_string(x) + commaString + std::to_string(y) + commaString + std::to_string(width) + commaString + std::to_string(height));
1597 mViewportTrace.PushCall("Viewport", params);
1602 inline void ReadBuffer(GLenum mode) override
1606 inline void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices) override
1610 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
1614 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
1618 inline void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
1622 inline void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) override
1626 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
1630 inline void GenQueries(GLsizei n, GLuint* ids) override
1634 inline void DeleteQueries(GLsizei n, const GLuint* ids) override
1638 inline GLboolean IsQuery(GLuint id) override
1643 inline void BeginQuery(GLenum target, GLuint id) override
1647 inline void EndQuery(GLenum target) override
1651 inline void GetQueryiv(GLenum target, GLenum pname, GLint* params) override
1655 inline void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) override
1659 inline GLboolean UnmapBuffer(GLenum target) override
1663 free(mMappedBuffer);
1664 mMappedBuffer = nullptr;
1666 return true; // false indicates corruption, nothing else.
1669 inline void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params) override
1673 inline void DrawBuffers(GLsizei n, const GLenum* bufs) override
1677 inline void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1681 inline void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1685 inline void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1689 inline void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1693 inline void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1697 inline void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1701 inline void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) override
1705 inline void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) override
1709 inline void FramebufferTexture2DMultisample(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) override
1711 // TODO : Check it if need
1712 FramebufferTexture2D(target, attachment, textarget, texture, level);
1715 inline void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) override
1719 inline GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) override
1721 mMappedBuffer = reinterpret_cast<GLvoid*>(malloc(offset + length));
1722 return mMappedBuffer;
1725 inline void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) override
1729 inline void BindVertexArray(GLuint array) override
1733 inline void DeleteVertexArrays(GLsizei n, const GLuint* arrays) override
1737 inline void GenVertexArrays(GLsizei n, GLuint* arrays) override
1741 inline GLboolean IsVertexArray(GLuint array) override
1746 inline void GetIntegeri_v(GLenum target, GLuint index, GLint* data) override
1750 inline void BeginTransformFeedback(GLenum primitiveMode) override
1754 inline void EndTransformFeedback(void) override
1758 inline void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) override
1762 inline void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override
1766 inline void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) override
1770 inline void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) override
1774 inline void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) override
1778 inline void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override
1782 inline void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override
1786 inline void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) override
1790 inline void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) override
1794 inline void VertexAttribI4iv(GLuint index, const GLint* v) override
1798 inline void VertexAttribI4uiv(GLuint index, const GLuint* v) override
1802 inline void GetUniformuiv(GLuint program, GLint location, GLuint* params) override
1806 inline GLint GetFragDataLocation(GLuint program, const GLchar* name) override
1811 inline void Uniform1ui(GLint location, GLuint v0) override
1815 inline void Uniform2ui(GLint location, GLuint v0, GLuint v1) override
1819 inline void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) override
1823 inline void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) override
1827 inline void Uniform1uiv(GLint location, GLsizei count, const GLuint* value) override
1831 inline void Uniform2uiv(GLint location, GLsizei count, const GLuint* value) override
1835 inline void Uniform3uiv(GLint location, GLsizei count, const GLuint* value) override
1839 inline void Uniform4uiv(GLint location, GLsizei count, const GLuint* value) override
1843 inline void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) override
1847 inline void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) override
1851 inline void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) override
1855 inline void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override
1859 inline const GLubyte* GetStringi(GLenum name, GLuint index) override
1864 inline void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) override
1868 inline void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) override
1872 inline void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) override
1876 inline GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) override
1878 return GL_INVALID_INDEX;
1881 inline void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) override
1885 inline void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) override
1889 inline void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) override
1893 inline void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override
1897 inline void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) override
1901 inline GLsync FenceSync(GLenum condition, GLbitfield flags) override
1906 inline GLboolean IsSync(GLsync sync) override
1911 inline void DeleteSync(GLsync sync) override
1915 inline GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
1920 inline void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
1924 inline void GetInteger64v(GLenum pname, GLint64* params) override
1928 inline void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) override
1932 inline void GetInteger64i_v(GLenum target, GLuint index, GLint64* data) override
1936 inline void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) override
1940 inline void GenSamplers(GLsizei count, GLuint* samplers) override
1944 inline void DeleteSamplers(GLsizei count, const GLuint* samplers) override
1948 inline GLboolean IsSampler(GLuint sampler) override
1953 inline void BindSampler(GLuint unit, GLuint sampler) override
1957 inline void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override
1961 inline void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) override
1965 inline void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override
1969 inline void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) override
1973 inline void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) override
1977 inline void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) override
1981 inline void VertexAttribDivisor(GLuint index, GLuint divisor) override
1985 inline void BindTransformFeedback(GLenum target, GLuint id) override
1989 inline void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override
1993 inline void GenTransformFeedbacks(GLsizei n, GLuint* ids) override
1997 inline GLboolean IsTransformFeedback(GLuint id) override
2002 inline void PauseTransformFeedback(void) override
2006 inline void ResumeTransformFeedback(void) override
2010 inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override
2012 mGetProgramBinaryCalled = true;
2015 inline void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) override
2019 inline void ProgramParameteri(GLuint program, GLenum pname, GLint value) override
2023 inline void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) override
2027 inline void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) override
2031 inline void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) override
2035 inline void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) override
2039 inline void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) override
2043 inline void BlendBarrier(void)
2048 inline void AddUniformCallToTraceStack(GLint location, const std::string& value)
2050 std::string name = "<not found>";
2051 bool matched = false;
2053 UniformIDMap& map = mUniforms[mCurrentProgram];
2054 for(UniformIDMap::iterator it = map.begin(); it != map.end(); ++it)
2056 if(it->second == location)
2066 mSetUniformTrace.PushCall(name, value);
2070 public: // TEST FUNCTIONS
2071 inline void SetCompileStatus(GLuint value)
2073 mCompileStatus = value;
2075 inline void SetLinkStatus(GLuint value)
2077 mLinkStatus = value;
2079 inline void SetAttribLocations(std::vector<std::string> locs)
2083 inline void SetGetErrorResult(GLenum result)
2085 mGetErrorResult = result;
2087 inline void SetGetStringResult(GLubyte* result)
2089 mGetStringResult = result;
2091 inline void SetIsBufferResult(GLboolean result)
2093 mIsBufferResult = result;
2095 inline void SetIsEnabledResult(GLboolean result)
2097 mIsEnabledResult = result;
2099 inline void SetIsFramebufferResult(GLboolean result)
2101 mIsFramebufferResult = result;
2103 inline void SetIsProgramResult(GLboolean result)
2105 mIsProgramResult = result;
2107 inline void SetIsRenderbufferResult(GLboolean result)
2109 mIsRenderbufferResult = result;
2111 inline void SetIsShaderResult(GLboolean result)
2113 mIsShaderResult = result;
2115 inline void SetIsTextureResult(GLboolean result)
2117 mIsTextureResult = result;
2119 inline void SetCheckFramebufferStatusResult(GLenum result)
2121 mCheckFramebufferStatusResult = result;
2123 inline void SetNumBinaryFormats(GLint numFormats)
2125 mNumBinaryFormats = numFormats;
2127 inline void SetBinaryFormats(GLint binaryFormats)
2129 mBinaryFormats = binaryFormats;
2131 inline void SetProgramBinaryLength(GLint length)
2133 mProgramBinaryLength = length;
2136 inline bool GetVertexAttribArrayState(GLuint index)
2138 if(index >= MAX_ATTRIBUTE_CACHE_SIZE)
2143 return mVertexAttribArrayState[index];
2145 inline void ClearVertexAttribArrayChanged()
2147 mVertexAttribArrayChanged = false;
2149 inline bool GetVertexAttribArrayChanged()
2151 return mVertexAttribArrayChanged;
2154 //Methods for CullFace verification
2155 inline void EnableCullFaceCallTrace(bool enable)
2157 mCullFaceTrace.Enable(enable);
2159 inline void ResetCullFaceCallStack()
2161 mCullFaceTrace.Reset();
2163 inline TraceCallStack& GetCullFaceTrace()
2165 return mCullFaceTrace;
2168 //Methods for Enable/Disable call verification
2169 inline void EnableEnableDisableCallTrace(bool enable)
2171 mEnableDisableTrace.Enable(enable);
2173 inline void ResetEnableDisableCallStack()
2175 mEnableDisableTrace.Reset();
2177 inline TraceCallStack& GetEnableDisableTrace()
2179 return mEnableDisableTrace;
2182 //Methods for Shader verification
2183 inline void EnableShaderCallTrace(bool enable)
2185 mShaderTrace.Enable(enable);
2187 inline void ResetShaderCallStack()
2189 mShaderTrace.Reset();
2191 inline TraceCallStack& GetShaderTrace()
2193 return mShaderTrace;
2196 //Methods for Texture verification
2197 inline void EnableTextureCallTrace(bool enable)
2199 mTextureTrace.Enable(enable);
2201 inline void ResetTextureCallStack()
2203 mTextureTrace.Reset();
2205 inline TraceCallStack& GetTextureTrace()
2207 return mTextureTrace;
2210 //Methods for Texture verification
2211 inline void EnableTexParameterCallTrace(bool enable)
2213 mTexParameterTrace.Enable(enable);
2215 inline void ResetTexParameterCallStack()
2217 mTexParameterTrace.Reset();
2219 inline TraceCallStack& GetTexParameterTrace()
2221 return mTexParameterTrace;
2224 //Methods for Draw verification
2225 inline void EnableDrawCallTrace(bool enable)
2227 mDrawTrace.Enable(enable);
2229 inline void ResetDrawCallStack()
2233 inline TraceCallStack& GetDrawTrace()
2238 //Methods for Depth function verification
2239 inline void EnableDepthFunctionCallTrace(bool enable)
2241 mDepthFunctionTrace.Enable(enable);
2243 inline void ResetDepthFunctionCallStack()
2245 mDepthFunctionTrace.Reset();
2247 inline TraceCallStack& GetDepthFunctionTrace()
2249 return mDepthFunctionTrace;
2252 //Methods for Stencil function verification
2253 inline void EnableStencilFunctionCallTrace(bool enable)
2255 mStencilFunctionTrace.Enable(enable);
2257 inline void ResetStencilFunctionCallStack()
2259 mStencilFunctionTrace.Reset();
2261 inline TraceCallStack& GetStencilFunctionTrace()
2263 return mStencilFunctionTrace;
2266 //Methods for Scissor verification
2267 inline void EnableScissorCallTrace(bool enable)
2269 mScissorTrace.Enable(enable);
2271 inline void ResetScissorCallStack()
2273 mScissorTrace.Reset();
2275 inline TraceCallStack& GetScissorTrace()
2277 return mScissorTrace;
2280 //Methods for Uniform function verification
2281 inline void EnableSetUniformCallTrace(bool enable)
2283 mSetUniformTrace.Enable(enable);
2285 inline void ResetSetUniformCallStack()
2287 mSetUniformTrace.Reset();
2289 inline TraceCallStack& GetSetUniformTrace()
2291 return mSetUniformTrace;
2294 //Methods for Viewport verification
2295 inline void EnableViewportCallTrace(bool enable)
2297 mViewportTrace.Enable(enable);
2299 inline void ResetViewportCallStack()
2301 mViewportTrace.Reset();
2303 inline TraceCallStack& GetViewportTrace()
2305 return mViewportTrace;
2307 inline TraceCallStack& GetBufferTrace()
2309 return mBufferTrace;
2312 template<typename T>
2313 inline bool GetUniformValue(const char* name, T& value) const
2315 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2316 program_it != mUniforms.end();
2319 const UniformIDMap& uniformIDs = program_it->second;
2321 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2322 if(uniform_it != uniformIDs.end())
2324 // found one matching uniform name, lets check the value...
2325 GLuint programId = program_it->first;
2326 GLint uniformId = uniform_it->second;
2328 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(value);
2329 return mProgramUniforms.GetUniformValue(programId, uniformId, value);
2335 template<typename T>
2336 inline bool CheckUniformValue(const char* name, const T& value) const
2338 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2339 program_it != mUniforms.end();
2342 const UniformIDMap& uniformIDs = program_it->second;
2344 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2345 if(uniform_it != uniformIDs.end())
2347 // found one matching uniform name, lets check the value...
2348 GLuint programId = program_it->first;
2349 GLint uniformId = uniform_it->second;
2351 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(value);
2352 if(mProgramUniforms.CheckUniformValue(programId, uniformId, value))
2354 // the value matches
2360 fprintf(stderr, "%s Not found, printing possible values:\n", name);
2361 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2362 program_it != mUniforms.end();
2365 const UniformIDMap& uniformIDs = program_it->second;
2367 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2368 if(uniform_it != uniformIDs.end())
2370 // found one matching uniform name, lets check the value...
2371 GLuint programId = program_it->first;
2372 GLint uniformId = uniform_it->second;
2374 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(value);
2376 if(mProgramUniforms.GetUniformValue(programId, uniformId, origValue))
2378 std::stringstream out;
2379 out << "Program: " << programId << ", " << uniform_it->first << ": " << origValue;
2380 fprintf(stderr, "%s\n", out.str().c_str());
2387 template<typename T>
2388 inline bool GetUniformValue(GLuint programId, GLuint uniformId, T& outValue) const
2390 const ProgramUniformValue<T>& mProgramUniforms = GetProgramUniformsForType(outValue);
2391 return mProgramUniforms.GetUniformValue(programId, uniformId, outValue);
2394 inline bool GetUniformIds(const char* name, GLuint& programId, GLuint& uniformId) const
2396 for(ProgramUniformMap::const_iterator program_it = mUniforms.begin();
2397 program_it != mUniforms.end();
2400 const UniformIDMap& uniformIDs = program_it->second;
2402 UniformIDMap::const_iterator uniform_it = uniformIDs.find(name);
2403 if(uniform_it != uniformIDs.end())
2405 programId = program_it->first;
2406 uniformId = uniform_it->second;
2413 inline void SetCustomUniforms(std::vector<UniformData>& customUniformData)
2415 mCustomUniformData = customUniformData;
2418 inline GLuint GetLastShaderCompiled() const
2420 return mLastShaderCompiled;
2423 inline GLuint GetLastProgramCreated() const
2425 return mLastProgramIdUsed;
2428 inline GLbitfield GetLastClearMask() const
2430 return mLastClearBitMask;
2435 ATTRIB_UNKNOWN = -1,
2440 ATTRIB_BONE_WEIGHTS,
2441 ATTRIB_BONE_INDICES,
2445 struct ScissorParams
2461 // Methods to check scissor tests
2462 inline const ScissorParams& GetScissorParams() const
2464 return mScissorParams;
2467 struct ColorMaskParams
2483 inline bool GetProgramBinaryCalled() const
2485 return mGetProgramBinaryCalled;
2488 inline unsigned int GetClearCountCalled() const
2493 inline const ColorMaskParams& GetColorMaskParams() const
2495 return mColorMaskParams;
2498 typedef std::vector<size_t> BufferDataCalls;
2499 inline const BufferDataCalls& GetBufferDataCalls() const
2501 return mBufferDataCalls;
2503 inline void ResetBufferDataCalls()
2505 mBufferDataCalls.clear();
2508 typedef std::vector<size_t> BufferSubDataCalls;
2509 inline const BufferSubDataCalls& GetBufferSubDataCalls() const
2511 return mBufferSubDataCalls;
2513 inline void ResetBufferSubDataCalls()
2515 mBufferSubDataCalls.clear();
2519 GLuint mCurrentProgram;
2520 GLuint mCompileStatus;
2521 BufferDataCalls mBufferDataCalls;
2522 BufferSubDataCalls mBufferSubDataCalls;
2523 GLvoid* mMappedBuffer{nullptr};
2525 GLenum mGetErrorResult;
2526 GLubyte* mGetStringResult;
2527 GLboolean mIsBufferResult;
2528 GLboolean mIsEnabledResult;
2529 GLboolean mIsFramebufferResult;
2530 GLboolean mIsProgramResult;
2531 GLboolean mIsRenderbufferResult;
2532 GLboolean mIsShaderResult;
2533 GLboolean mIsTextureResult;
2534 GLenum mActiveTextureUnit;
2535 GLenum mCheckFramebufferStatusResult;
2536 GLint mFramebufferStatus;
2537 GLenum mFramebufferDepthAttached;
2538 GLenum mFramebufferStencilAttached;
2539 GLenum mFramebufferDepthStencilAttached;
2540 GLuint mFramebufferColorAttachmentCount;
2541 GLuint mFrameBufferColorStatus;
2542 GLuint mFramebufferDepthAttachmentCount;
2543 GLuint mFramebufferStencilAttachmentCount;
2544 GLuint mFramebufferDepthStencilAttachmentCount;
2545 GLint mNumBinaryFormats;
2546 GLint mBinaryFormats;
2547 GLint mProgramBinaryLength;
2548 bool mVertexAttribArrayState[MAX_ATTRIBUTE_CACHE_SIZE];
2549 bool mVertexAttribArrayChanged; // whether the vertex attrib array has been changed
2550 bool mGetProgramBinaryCalled;
2551 typedef std::map<GLuint, std::string> ShaderSourceMap;
2552 ShaderSourceMap mShaderSources;
2553 std::vector<std::string> mAttribLocs; // should be bound to shader
2554 GLuint mLastShaderCompiled;
2555 GLbitfield mLastClearBitMask;
2556 Vector4 mLastClearColor;
2557 unsigned int mClearCount;
2559 Vector4 mLastBlendColor;
2560 GLenum mLastBlendEquationRgb;
2561 GLenum mLastBlendEquationAlpha;
2562 GLenum mLastBlendFuncSrcRgb;
2563 GLenum mLastBlendFuncDstRgb;
2564 GLenum mLastBlendFuncSrcAlpha;
2565 GLenum mLastBlendFuncDstAlpha;
2567 GLboolean mLastDepthMask;
2569 // Data for manipulating the IDs returned by GenTextures
2570 GLuint mLastAutoTextureIdUsed;
2571 GLuint mNumGeneratedTextures;
2572 std::vector<GLuint> mNextTextureIds;
2573 std::vector<GLuint> mDeletedTextureIds;
2574 std::vector<GLuint> mBoundTextures;
2576 struct ActiveTextureType
2578 std::vector<GLuint> mBoundTextures;
2581 ActiveTextureType mActiveTextures[MIN_TEXTURE_UNIT_LIMIT];
2583 TraceCallStack mBufferTrace;
2584 TraceCallStack mCullFaceTrace;
2585 TraceCallStack mEnableDisableTrace;
2586 TraceCallStack mShaderTrace;
2587 TraceCallStack mTextureTrace;
2588 TraceCallStack mTexParameterTrace;
2589 TraceCallStack mDrawTrace;
2590 TraceCallStack mDepthFunctionTrace;
2591 TraceCallStack mStencilFunctionTrace;
2592 TraceCallStack mScissorTrace;
2593 TraceCallStack mSetUniformTrace;
2594 TraceCallStack mViewportTrace;
2596 // Shaders & Uniforms
2597 uint32_t mShaderLanguageVersion{320u};
2599 GLuint mLastShaderIdUsed;
2600 GLuint mLastProgramIdUsed{0u};
2601 GLuint mLastUniformIdUsed;
2602 typedef std::map<std::string, GLint> UniformIDMap;
2603 typedef std::map<GLuint, UniformIDMap> ProgramUniformMap;
2604 ProgramUniformMap mUniforms;
2605 std::vector<ActiveUniform> mActiveUniforms;
2606 std::vector<UniformData> mCustomUniformData{};
2608 template<typename T>
2609 struct ProgramUniformValue : public std::map<GLuint, std::map<GLint, T> >
2612 typedef std::map<GLint, T> UniformValueMap;
2613 typedef std::map<GLuint, UniformValueMap> Map;
2615 bool SetUniformValue(GLuint program, GLuint uniform, const T& value)
2622 typename Map::iterator it = Map::find(program);
2623 if(it == Map::end())
2625 // if its the first uniform for this program add it
2626 std::pair<typename Map::iterator, bool> result =
2627 Map::insert(typename Map::value_type(program, UniformValueMap()));
2631 UniformValueMap& uniforms = it->second;
2632 uniforms[uniform] = value;
2637 bool CheckUniformValue(GLuint program, GLuint uniform, const T& value) const
2640 if(GetUniformValue(program, uniform, uniformValue))
2642 return CompareType<T>(value, uniformValue, Math::MACHINE_EPSILON_10);
2648 bool GetUniformValue(GLuint program, GLuint uniform, T& value) const
2655 typename Map::const_iterator it = Map::find(program);
2656 if(it == Map::end())
2658 // Uniform values always initialised as 0
2663 const UniformValueMap& uniforms = it->second;
2664 typename UniformValueMap::const_iterator it2 = uniforms.find(uniform);
2665 if(it2 == uniforms.end())
2667 // Uniform values always initialised as 0
2671 value = it2->second;
2678 ProgramUniformValue<int> mProgramUniforms1i;
2679 ProgramUniformValue<float> mProgramUniforms1f;
2680 ProgramUniformValue<Vector2> mProgramUniforms2f;
2681 ProgramUniformValue<Vector3> mProgramUniforms3f;
2682 ProgramUniformValue<Vector4> mProgramUniforms4f;
2683 ProgramUniformValue<Matrix> mProgramUniformsMat4;
2684 ProgramUniformValue<Matrix3> mProgramUniformsMat3;
2686 inline const ProgramUniformValue<int>& GetProgramUniformsForType(const int) const
2688 return mProgramUniforms1i;
2690 inline const ProgramUniformValue<float>& GetProgramUniformsForType(const float) const
2692 return mProgramUniforms1f;
2694 inline const ProgramUniformValue<Vector2>& GetProgramUniformsForType(const Vector2&) const
2696 return mProgramUniforms2f;
2698 inline const ProgramUniformValue<Vector3>& GetProgramUniformsForType(const Vector3&) const
2700 return mProgramUniforms3f;
2702 inline const ProgramUniformValue<Vector4>& GetProgramUniformsForType(const Vector4&) const
2704 return mProgramUniforms4f;
2706 inline const ProgramUniformValue<Matrix>& GetProgramUniformsForType(const Matrix&) const
2708 return mProgramUniformsMat4;
2710 inline const ProgramUniformValue<Matrix3>& GetProgramUniformsForType(const Matrix3&) const
2712 return mProgramUniformsMat3;
2714 inline void SetVertexAttribArray(GLuint index, bool state)
2716 if(index >= MAX_ATTRIBUTE_CACHE_SIZE)
2721 mVertexAttribArrayState[index] = state;
2722 mVertexAttribArrayChanged = true;
2725 ScissorParams mScissorParams;
2726 ColorMaskParams mColorMaskParams;
2730 inline int TestGlAbstraction::ProgramUniformValue<int>::GetZero() const
2736 inline float TestGlAbstraction::ProgramUniformValue<float>::GetZero() const
2742 inline Vector2 TestGlAbstraction::ProgramUniformValue<Vector2>::GetZero() const
2744 return Vector2::ZERO;
2748 inline Vector3 TestGlAbstraction::ProgramUniformValue<Vector3>::GetZero() const
2750 return Vector3::ZERO;
2754 inline Vector4 TestGlAbstraction::ProgramUniformValue<Vector4>::GetZero() const
2756 return Vector4::ZERO;
2760 inline Matrix TestGlAbstraction::ProgramUniformValue<Matrix>::GetZero() const
2766 inline Matrix3 TestGlAbstraction::ProgramUniformValue<Matrix3>::GetZero() const
2768 return Matrix3(Matrix());
2773 bool BlendEnabled(const Dali::TraceCallStack& callStack);
2774 bool BlendDisabled(const Dali::TraceCallStack& callStack);
2776 #endif // TEST_GL_ABSTRACTION_H