1 #ifndef DALI_INTERNAL_GLES3_IMPLEMENTATION_H
2 #define DALI_INTERNAL_GLES3_IMPLEMENTATION_H
5 * Copyright (c) 2022 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.
22 #include <GLES3/gl3.h>
23 #include <GLES3/gl32.h>
26 #include <dali/internal/graphics/gles/gles-abstraction.h>
34 class Gles3Implementation : public GlesAbstraction
41 ~Gles3Implementation() override
45 void ReadBuffer(GLenum mode) override
50 void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices) override
52 glDrawRangeElements(mode, start, end, count, type, indices);
55 void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) override
57 glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
60 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
62 glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
65 void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
67 glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
70 void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) override
72 glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
75 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
77 glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
80 void GenQueries(GLsizei n, GLuint* ids) override
85 void DeleteQueries(GLsizei n, const GLuint* ids) override
87 glDeleteQueries(n, ids);
90 GLboolean IsQuery(GLuint id) override
95 void BeginQuery(GLenum target, GLuint id) override
97 glBeginQuery(target, id);
100 void EndQuery(GLenum target) override
105 void GetQueryiv(GLenum target, GLenum pname, GLint* params) override
107 glGetQueryiv(target, pname, params);
110 void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) override
112 glGetQueryObjectuiv(id, pname, params);
115 GLboolean UnmapBuffer(GLenum target) override
117 return glUnmapBuffer(target);
120 void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params) override
122 glGetBufferPointerv(target, pname, params);
125 void DrawBuffers(GLsizei n, const GLenum* bufs) override
127 glDrawBuffers(n, bufs);
130 void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
132 glUniformMatrix2x3fv(location, count, transpose, value);
135 void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
137 glUniformMatrix3x2fv(location, count, transpose, value);
140 void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
142 glUniformMatrix2x4fv(location, count, transpose, value);
145 void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
147 glUniformMatrix4x2fv(location, count, transpose, value);
150 void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
152 glUniformMatrix3x4fv(location, count, transpose, value);
155 void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
157 glUniformMatrix4x3fv(location, count, transpose, value);
160 void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) override
162 glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
165 void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) override
167 // @note even gles 3.0 support glRenderbufferStorageMultisample, We cannot use that API with FramebufferTexture2DMultisampleEXT cause vendor issue.
168 // Since dali only use RenderbufferStorageMultisample API for FBO MSAA, just keep to use extension API.
169 mGlExtensions.RenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
172 void FramebufferTexture2DMultisample(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) override
174 mGlExtensions.FramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples);
177 void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) override
179 glFramebufferTextureLayer(target, attachment, texture, level, layer);
182 GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) override
184 return glMapBufferRange(target, offset, length, access);
187 void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) override
189 glFlushMappedBufferRange(target, offset, length);
192 void BindVertexArray(GLuint array) override
194 glBindVertexArray(array);
197 void DeleteVertexArrays(GLsizei n, const GLuint* arrays) override
199 glDeleteVertexArrays(n, arrays);
202 void GenVertexArrays(GLsizei n, GLuint* arrays) override
204 glGenVertexArrays(n, arrays);
207 GLboolean IsVertexArray(GLuint array) override
209 return glIsVertexArray(array);
212 void GetIntegeri_v(GLenum target, GLuint index, GLint* data) override
214 glGetIntegeri_v(target, index, data);
217 void BeginTransformFeedback(GLenum primitiveMode) override
219 glBeginTransformFeedback(primitiveMode);
222 void EndTransformFeedback(void) override
224 glEndTransformFeedback();
227 void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) override
229 glBindBufferRange(target, index, buffer, offset, size);
232 void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override
234 glBindBufferBase(target, index, buffer);
237 void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) override
239 glTransformFeedbackVaryings(program, count, varyings, bufferMode);
242 void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) override
244 glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
247 void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) override
249 glVertexAttribIPointer(index, size, type, stride, pointer);
252 void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override
254 glGetVertexAttribIiv(index, pname, params);
257 void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override
259 glGetVertexAttribIuiv(index, pname, params);
262 void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) override
264 glVertexAttribI4i(index, x, y, z, w);
267 void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) override
269 glVertexAttribI4ui(index, x, y, z, w);
272 void VertexAttribI4iv(GLuint index, const GLint* v) override
274 glVertexAttribI4iv(index, v);
277 void VertexAttribI4uiv(GLuint index, const GLuint* v) override
279 glVertexAttribI4uiv(index, v);
282 void GetUniformuiv(GLuint program, GLint location, GLuint* params) override
284 glGetUniformuiv(program, location, params);
287 GLint GetFragDataLocation(GLuint program, const GLchar* name) override
289 return glGetFragDataLocation(program, name);
292 void Uniform1ui(GLint location, GLuint v0) override
294 glUniform1ui(location, v0);
297 void Uniform2ui(GLint location, GLuint v0, GLuint v1) override
299 glUniform2ui(location, v0, v1);
302 void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) override
304 glUniform3ui(location, v0, v1, v2);
307 void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) override
309 glUniform4ui(location, v0, v1, v2, v3);
312 void Uniform1uiv(GLint location, GLsizei count, const GLuint* value) override
314 glUniform1uiv(location, count, value);
317 void Uniform2uiv(GLint location, GLsizei count, const GLuint* value) override
319 glUniform2uiv(location, count, value);
322 void Uniform3uiv(GLint location, GLsizei count, const GLuint* value) override
324 glUniform3uiv(location, count, value);
327 void Uniform4uiv(GLint location, GLsizei count, const GLuint* value) override
329 glUniform4uiv(location, count, value);
332 void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) override
334 glClearBufferiv(buffer, drawbuffer, value);
337 void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) override
339 glClearBufferuiv(buffer, drawbuffer, value);
342 void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) override
344 glClearBufferfv(buffer, drawbuffer, value);
347 void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override
349 glClearBufferfi(buffer, drawbuffer, depth, stencil);
352 const GLubyte* GetStringi(GLenum name, GLuint index) override
354 return glGetStringi(name, index);
357 void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) override
359 glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
362 void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) override
364 glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
367 void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) override
369 glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
372 GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) override
374 return glGetUniformBlockIndex(program, uniformBlockName);
377 void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) override
379 glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
382 void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) override
384 glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
387 void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) override
389 glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
392 void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override
394 glDrawArraysInstanced(mode, first, count, instanceCount);
397 void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) override
399 glDrawElementsInstanced(mode, count, type, indices, instanceCount);
402 GLsync FenceSync(GLenum condition, GLbitfield flags) override
404 return glFenceSync(condition, flags);
407 GLboolean IsSync(GLsync sync) override
409 return glIsSync(sync);
412 void DeleteSync(GLsync sync) override
417 GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
419 return glClientWaitSync(sync, flags, timeout);
422 void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
424 glWaitSync(sync, flags, timeout);
427 void GetInteger64v(GLenum pname, GLint64* params) override
429 glGetInteger64v(pname, params);
432 void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) override
434 glGetSynciv(sync, pname, bufSize, length, values);
437 void GetInteger64i_v(GLenum target, GLuint index, GLint64* data) override
439 glGetInteger64i_v(target, index, data);
442 void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) override
444 glGetBufferParameteri64v(target, pname, params);
447 void GenSamplers(GLsizei count, GLuint* samplers) override
449 glGenSamplers(count, samplers);
452 void DeleteSamplers(GLsizei count, const GLuint* samplers) override
454 glDeleteSamplers(count, samplers);
457 GLboolean IsSampler(GLuint sampler) override
459 return glIsSampler(sampler);
462 void BindSampler(GLuint unit, GLuint sampler) override
464 glBindSampler(unit, sampler);
467 void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override
469 glSamplerParameteri(sampler, pname, param);
472 void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) override
474 glSamplerParameteriv(sampler, pname, param);
477 void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override
479 glSamplerParameterf(sampler, pname, param);
482 void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) override
484 glSamplerParameterfv(sampler, pname, param);
487 void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) override
489 glGetSamplerParameteriv(sampler, pname, params);
492 void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) override
494 glGetSamplerParameterfv(sampler, pname, params);
497 void VertexAttribDivisor(GLuint index, GLuint divisor) override
499 glVertexAttribDivisor(index, divisor);
502 void BindTransformFeedback(GLenum target, GLuint id) override
504 glBindTransformFeedback(target, id);
507 void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override
509 glDeleteTransformFeedbacks(n, ids);
512 void GenTransformFeedbacks(GLsizei n, GLuint* ids) override
514 glGenTransformFeedbacks(n, ids);
517 GLboolean IsTransformFeedback(GLuint id) override
519 return glIsTransformFeedback(id);
522 void PauseTransformFeedback(void) override
524 glPauseTransformFeedback();
527 void ResumeTransformFeedback(void) override
529 glResumeTransformFeedback();
532 void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override
534 glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
537 void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) override
539 glProgramBinary(program, binaryFormat, binary, length);
542 void ProgramParameteri(GLuint program, GLenum pname, GLint value) override
544 glProgramParameteri(program, pname, value);
547 void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) override
549 glInvalidateFramebuffer(target, numAttachments, attachments);
552 void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) override
554 glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
557 void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) override
559 glTexStorage2D(target, levels, internalformat, width, height);
562 void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) override
564 glTexStorage3D(target, levels, internalformat, width, height, depth);
567 void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) override
569 glGetInternalformativ(target, internalformat, pname, bufSize, params);
572 void BlendBarrier(void) override
574 if(!mGlExtensions.BlendBarrierKHR())
581 GlExtensions mGlExtensions;
584 } // namespace Adaptor
586 } // namespace Internal
590 #endif // DALI_INTERNAL_GLES3_IMPLEMENTATION_H