1 #ifndef DALI_INTERNAL_GLES3_IMPLEMENTATION_H
2 #define DALI_INTERNAL_GLES3_IMPLEMENTATION_H
5 * Copyright (c) 2020 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>
37 class Gles3Implementation : public GlesAbstraction
41 Gles3Implementation() {}
43 ~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
82 glGenQueries( n, ids );
85 void DeleteQueries( GLsizei n, const GLuint* ids ) override
87 glDeleteQueries( n, ids );
90 GLboolean IsQuery( GLuint id ) override
92 return glIsQuery( id );
95 void BeginQuery( GLenum target, GLuint id ) override
97 glBeginQuery( target, id );
100 void EndQuery( GLenum target ) override
102 glEndQuery( target );
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
407 glDeleteSync( sync );
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