1 #ifndef DALI_INTERNAL_GLES3_IMPLEMENTATION_H
2 #define DALI_INTERNAL_GLES3_IMPLEMENTATION_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.
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 glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
170 void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) override
172 glFramebufferTextureLayer(target, attachment, texture, level, layer);
175 GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) override
177 return glMapBufferRange(target, offset, length, access);
180 void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) override
182 glFlushMappedBufferRange(target, offset, length);
185 void BindVertexArray(GLuint array) override
187 glBindVertexArray(array);
190 void DeleteVertexArrays(GLsizei n, const GLuint* arrays) override
192 glDeleteVertexArrays(n, arrays);
195 void GenVertexArrays(GLsizei n, GLuint* arrays) override
197 glGenVertexArrays(n, arrays);
200 GLboolean IsVertexArray(GLuint array) override
202 return glIsVertexArray(array);
205 void GetIntegeri_v(GLenum target, GLuint index, GLint* data) override
207 glGetIntegeri_v(target, index, data);
210 void BeginTransformFeedback(GLenum primitiveMode) override
212 glBeginTransformFeedback(primitiveMode);
215 void EndTransformFeedback(void) override
217 glEndTransformFeedback();
220 void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) override
222 glBindBufferRange(target, index, buffer, offset, size);
225 void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override
227 glBindBufferBase(target, index, buffer);
230 void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) override
232 glTransformFeedbackVaryings(program, count, varyings, bufferMode);
235 void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) override
237 glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
240 void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) override
242 glVertexAttribIPointer(index, size, type, stride, pointer);
245 void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override
247 glGetVertexAttribIiv(index, pname, params);
250 void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override
252 glGetVertexAttribIuiv(index, pname, params);
255 void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) override
257 glVertexAttribI4i(index, x, y, z, w);
260 void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) override
262 glVertexAttribI4ui(index, x, y, z, w);
265 void VertexAttribI4iv(GLuint index, const GLint* v) override
267 glVertexAttribI4iv(index, v);
270 void VertexAttribI4uiv(GLuint index, const GLuint* v) override
272 glVertexAttribI4uiv(index, v);
275 void GetUniformuiv(GLuint program, GLint location, GLuint* params) override
277 glGetUniformuiv(program, location, params);
280 GLint GetFragDataLocation(GLuint program, const GLchar* name) override
282 return glGetFragDataLocation(program, name);
285 void Uniform1ui(GLint location, GLuint v0) override
287 glUniform1ui(location, v0);
290 void Uniform2ui(GLint location, GLuint v0, GLuint v1) override
292 glUniform2ui(location, v0, v1);
295 void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) override
297 glUniform3ui(location, v0, v1, v2);
300 void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) override
302 glUniform4ui(location, v0, v1, v2, v3);
305 void Uniform1uiv(GLint location, GLsizei count, const GLuint* value) override
307 glUniform1uiv(location, count, value);
310 void Uniform2uiv(GLint location, GLsizei count, const GLuint* value) override
312 glUniform2uiv(location, count, value);
315 void Uniform3uiv(GLint location, GLsizei count, const GLuint* value) override
317 glUniform3uiv(location, count, value);
320 void Uniform4uiv(GLint location, GLsizei count, const GLuint* value) override
322 glUniform4uiv(location, count, value);
325 void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) override
327 glClearBufferiv(buffer, drawbuffer, value);
330 void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) override
332 glClearBufferuiv(buffer, drawbuffer, value);
335 void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) override
337 glClearBufferfv(buffer, drawbuffer, value);
340 void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override
342 glClearBufferfi(buffer, drawbuffer, depth, stencil);
345 const GLubyte* GetStringi(GLenum name, GLuint index) override
347 return glGetStringi(name, index);
350 void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) override
352 glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
355 void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) override
357 glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
360 void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) override
362 glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
365 GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) override
367 return glGetUniformBlockIndex(program, uniformBlockName);
370 void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) override
372 glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
375 void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) override
377 glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
380 void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) override
382 glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
385 void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override
387 glDrawArraysInstanced(mode, first, count, instanceCount);
390 void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) override
392 glDrawElementsInstanced(mode, count, type, indices, instanceCount);
395 GLsync FenceSync(GLenum condition, GLbitfield flags) override
397 return glFenceSync(condition, flags);
400 GLboolean IsSync(GLsync sync) override
402 return glIsSync(sync);
405 void DeleteSync(GLsync sync) override
410 GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
412 return glClientWaitSync(sync, flags, timeout);
415 void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
417 glWaitSync(sync, flags, timeout);
420 void GetInteger64v(GLenum pname, GLint64* params) override
422 glGetInteger64v(pname, params);
425 void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) override
427 glGetSynciv(sync, pname, bufSize, length, values);
430 void GetInteger64i_v(GLenum target, GLuint index, GLint64* data) override
432 glGetInteger64i_v(target, index, data);
435 void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) override
437 glGetBufferParameteri64v(target, pname, params);
440 void GenSamplers(GLsizei count, GLuint* samplers) override
442 glGenSamplers(count, samplers);
445 void DeleteSamplers(GLsizei count, const GLuint* samplers) override
447 glDeleteSamplers(count, samplers);
450 GLboolean IsSampler(GLuint sampler) override
452 return glIsSampler(sampler);
455 void BindSampler(GLuint unit, GLuint sampler) override
457 glBindSampler(unit, sampler);
460 void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override
462 glSamplerParameteri(sampler, pname, param);
465 void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) override
467 glSamplerParameteriv(sampler, pname, param);
470 void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override
472 glSamplerParameterf(sampler, pname, param);
475 void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) override
477 glSamplerParameterfv(sampler, pname, param);
480 void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) override
482 glGetSamplerParameteriv(sampler, pname, params);
485 void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) override
487 glGetSamplerParameterfv(sampler, pname, params);
490 void VertexAttribDivisor(GLuint index, GLuint divisor) override
492 glVertexAttribDivisor(index, divisor);
495 void BindTransformFeedback(GLenum target, GLuint id) override
497 glBindTransformFeedback(target, id);
500 void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override
502 glDeleteTransformFeedbacks(n, ids);
505 void GenTransformFeedbacks(GLsizei n, GLuint* ids) override
507 glGenTransformFeedbacks(n, ids);
510 GLboolean IsTransformFeedback(GLuint id) override
512 return glIsTransformFeedback(id);
515 void PauseTransformFeedback(void) override
517 glPauseTransformFeedback();
520 void ResumeTransformFeedback(void) override
522 glResumeTransformFeedback();
525 void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override
527 glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
530 void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) override
532 glProgramBinary(program, binaryFormat, binary, length);
535 void ProgramParameteri(GLuint program, GLenum pname, GLint value) override
537 glProgramParameteri(program, pname, value);
540 void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) override
542 glInvalidateFramebuffer(target, numAttachments, attachments);
545 void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) override
547 glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
550 void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) override
552 glTexStorage2D(target, levels, internalformat, width, height);
555 void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) override
557 glTexStorage3D(target, levels, internalformat, width, height, depth);
560 void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) override
562 glGetInternalformativ(target, internalformat, pname, bufSize, params);
565 void BlendBarrier(void) override
567 if(!mGlExtensions.BlendBarrierKHR())
574 GlExtensions mGlExtensions;
577 } // namespace Adaptor
579 } // namespace Internal
583 #endif // DALI_INTERNAL_GLES3_IMPLEMENTATION_H