[Tizen] Support gles2.0 device also use BuildUniformBlockReflection() API
[platform/core/uifw/dali-adaptor.git] / dali / internal / graphics / gles / gles2-implementation.h
1 #ifndef DALI_INTERNAL_GLES2_IMPLEMENTATION_H
2 #define DALI_INTERNAL_GLES2_IMPLEMENTATION_H
3
4 /*
5  * Copyright (c) 2024 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/integration-api/debug.h>
23
24 // INTERNAL INCLUDES
25 #include <dali/internal/graphics/gles/gl-extensions.h>
26 #include <dali/internal/graphics/gles/gles-abstraction.h>
27
28 namespace Dali
29 {
30 namespace Internal
31 {
32 namespace Adaptor
33 {
34 class Gles2Implementation : public GlesAbstraction
35 {
36 public:
37   Gles2Implementation()
38   {
39   }
40
41   ~Gles2Implementation() override
42   {
43   }
44
45   void ReadBuffer(GLenum mode) override
46   {
47     DALI_LOG_ERROR("glReadBuffer is not supported in OpenGL es 2.0\n");
48   }
49
50   void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices) override
51   {
52     DALI_LOG_ERROR("glDrawRangeElements is not supported in OpenGL es 2.0\n");
53   }
54
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
56   {
57     DALI_LOG_ERROR("glTexImage3D is not supported in OpenGL es 2.0\n");
58   }
59
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
61   {
62     DALI_LOG_ERROR("glTexSubImage3D is not supported in OpenGL es 2.0\n");
63   }
64
65   void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
66   {
67     DALI_LOG_ERROR("glCopyTexSubImage3D is not supported in OpenGL es 2.0\n");
68   }
69
70   void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) override
71   {
72     DALI_LOG_ERROR("glCompressedTexImage3D is not supported in OpenGL es 2.0\n");
73   }
74
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
76   {
77     DALI_LOG_ERROR("glCompressedTexSubImage3D is not supported in OpenGL es 2.0\n");
78   }
79
80   void GenQueries(GLsizei n, GLuint* ids) override
81   {
82     DALI_LOG_ERROR("glGenQueries is not supported in OpenGL es 2.0\n");
83   }
84
85   void DeleteQueries(GLsizei n, const GLuint* ids) override
86   {
87     DALI_LOG_ERROR("glDeleteQueries is not supported in OpenGL es 2.0\n");
88   }
89
90   GLboolean IsQuery(GLuint id) override
91   {
92     DALI_LOG_ERROR("glIsQuery is not supported in OpenGL es 2.0\n");
93     return 0;
94   }
95
96   void BeginQuery(GLenum target, GLuint id) override
97   {
98     DALI_LOG_ERROR("glBeginQuery is not supported in OpenGL es 2.0\n");
99   }
100
101   void EndQuery(GLenum target) override
102   {
103     DALI_LOG_ERROR("glEndQuery is not supported in OpenGL es 2.0\n");
104   }
105
106   void GetQueryiv(GLenum target, GLenum pname, GLint* params) override
107   {
108     DALI_LOG_ERROR("glGetQueryiv is not supported in OpenGL es 2.0\n");
109   }
110
111   void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) override
112   {
113     DALI_LOG_ERROR("glGetQueryObjectuiv is not supported in OpenGL es 2.0\n");
114   }
115
116   GLboolean UnmapBuffer(GLenum target) override
117   {
118     DALI_LOG_ERROR("glUnmapBuffer is not supported in OpenGL es 2.0\n");
119     return 0;
120   }
121
122   void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params) override
123   {
124     DALI_LOG_ERROR("glGetBufferPointerv is not supported in OpenGL es 2.0\n");
125   }
126
127   void DrawBuffers(GLsizei n, const GLenum* bufs) override
128   {
129     DALI_LOG_ERROR("glDrawBuffers is not supported in OpenGL es 2.0\n");
130   }
131
132   void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
133   {
134     DALI_LOG_ERROR("glUniformMatrix2x3fv is not supported in OpenGL es 2.0\n");
135   }
136
137   void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
138   {
139     DALI_LOG_ERROR("glUniformMatrix3x2fv is not supported in OpenGL es 2.0\n");
140   }
141
142   void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
143   {
144     DALI_LOG_ERROR("glUniformMatrix2x4fv is not supported in OpenGL es 2.0\n");
145   }
146
147   void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
148   {
149     DALI_LOG_ERROR("glUniformMatrix4x2fv is not supported in OpenGL es 2.0\n");
150   }
151
152   void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
153   {
154     DALI_LOG_ERROR("glUniformMatrix3x4fv is not supported in OpenGL es 2.0\n");
155   }
156
157   void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
158   {
159     DALI_LOG_ERROR("glUniformMatrix4x3fv is not supported in OpenGL es 2.0\n");
160   }
161
162   void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) override
163   {
164     DALI_LOG_ERROR("glBlitFramebuffer is not supported in OpenGL es 2.0\n");
165   }
166
167   void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) override
168   {
169     mGlExtensions.RenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
170   }
171
172   void FramebufferTexture2DMultisample(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) override
173   {
174     mGlExtensions.FramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples);
175   }
176
177   void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) override
178   {
179     DALI_LOG_ERROR("glFramebufferTextureLayer is not supported in OpenGL es 2.0\n");
180   }
181
182   GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) override
183   {
184     DALI_LOG_ERROR("glMapBufferRange is not supported in OpenGL es 2.0\n");
185     return NULL;
186   }
187
188   void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) override
189   {
190     DALI_LOG_ERROR("glFlushMappedBufferRange is not supported in OpenGL es 2.0\n");
191   }
192
193   void BindVertexArray(GLuint array) override
194   {
195     DALI_LOG_ERROR("glBindVertexArray is not supported in OpenGL es 2.0\n");
196   }
197
198   void DeleteVertexArrays(GLsizei n, const GLuint* arrays) override
199   {
200     DALI_LOG_ERROR("glDeleteVertexArrays is not supported in OpenGL es 2.0\n");
201   }
202
203   void GenVertexArrays(GLsizei n, GLuint* arrays) override
204   {
205     DALI_LOG_ERROR("glGenVertexArrays is not supported in OpenGL es 2.0\n");
206   }
207
208   GLboolean IsVertexArray(GLuint array) override
209   {
210     DALI_LOG_ERROR("glIsVertexArray is not supported in OpenGL es 2.0\n");
211     return 0;
212   }
213
214   void GetIntegeri_v(GLenum target, GLuint index, GLint* data) override
215   {
216     DALI_LOG_ERROR("glGetIntegeri_v is not supported in OpenGL es 2.0\n");
217   }
218
219   void BeginTransformFeedback(GLenum primitiveMode) override
220   {
221     DALI_LOG_ERROR("glBeginTransformFeedback is not supported in OpenGL es 2.0\n");
222   }
223
224   void EndTransformFeedback(void) override
225   {
226     DALI_LOG_ERROR("glEndTransformFeedback is not supported in OpenGL es 2.0\n");
227   }
228
229   void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) override
230   {
231     DALI_LOG_ERROR("glBindBufferRange is not supported in OpenGL es 2.0\n");
232   }
233
234   void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override
235   {
236     DALI_LOG_ERROR("glBindBufferBase is not supported in OpenGL es 2.0\n");
237   }
238
239   void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) override
240   {
241     DALI_LOG_ERROR("glTransformFeedbackVaryings is not supported in OpenGL es 2.0\n");
242   }
243
244   void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) override
245   {
246     DALI_LOG_ERROR("glGetTransformFeedbackVarying is not supported in OpenGL es 2.0\n");
247   }
248
249   void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) override
250   {
251     DALI_LOG_ERROR("glVertexAttribIPointer is not supported in OpenGL es 2.0\n");
252   }
253
254   void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override
255   {
256     DALI_LOG_ERROR("glGetVertexAttribIiv is not supported in OpenGL es 2.0\n");
257   }
258
259   void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override
260   {
261     DALI_LOG_ERROR("glGetVertexAttribIuiv is not supported in OpenGL es 2.0\n");
262   }
263
264   void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) override
265   {
266     DALI_LOG_ERROR("glVertexAttribI4i is not supported in OpenGL es 2.0\n");
267   }
268
269   void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) override
270   {
271     DALI_LOG_ERROR("glVertexAttribI4ui is not supported in OpenGL es 2.0\n");
272   }
273
274   void VertexAttribI4iv(GLuint index, const GLint* v) override
275   {
276     DALI_LOG_ERROR("glVertexAttribI4iv is not supported in OpenGL es 2.0\n");
277   }
278
279   void VertexAttribI4uiv(GLuint index, const GLuint* v) override
280   {
281     DALI_LOG_ERROR("glVertexAttribI4uiv is not supported in OpenGL es 2.0\n");
282   }
283
284   void GetUniformuiv(GLuint program, GLint location, GLuint* params) override
285   {
286     DALI_LOG_ERROR("glGetUniformuiv is not supported in OpenGL es 2.0\n");
287   }
288
289   GLint GetFragDataLocation(GLuint program, const GLchar* name) override
290   {
291     DALI_LOG_ERROR("glGetFragDataLocation is not supported in OpenGL es 2.0\n");
292     return -1;
293   }
294
295   void Uniform1ui(GLint location, GLuint v0) override
296   {
297     DALI_LOG_ERROR("glUniform1ui is not supported in OpenGL es 2.0\n");
298   }
299
300   void Uniform2ui(GLint location, GLuint v0, GLuint v1) override
301   {
302     DALI_LOG_ERROR("glUniform2ui is not supported in OpenGL es 2.0\n");
303   }
304
305   void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) override
306   {
307     DALI_LOG_ERROR("glUniform3ui is not supported in OpenGL es 2.0\n");
308   }
309
310   void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) override
311   {
312     DALI_LOG_ERROR("glUniform4ui is not supported in OpenGL es 2.0\n");
313   }
314
315   void Uniform1uiv(GLint location, GLsizei count, const GLuint* value) override
316   {
317     DALI_LOG_ERROR("glUniform1uiv is not supported in OpenGL es 2.0\n");
318   }
319
320   void Uniform2uiv(GLint location, GLsizei count, const GLuint* value) override
321   {
322     DALI_LOG_ERROR("glUniform2uiv is not supported in OpenGL es 2.0\n");
323   }
324
325   void Uniform3uiv(GLint location, GLsizei count, const GLuint* value) override
326   {
327     DALI_LOG_ERROR("glUniform3uiv is not supported in OpenGL es 2.0\n");
328   }
329
330   void Uniform4uiv(GLint location, GLsizei count, const GLuint* value) override
331   {
332     DALI_LOG_ERROR("glUniform4uiv is not supported in OpenGL es 2.0\n");
333   }
334
335   void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) override
336   {
337     DALI_LOG_ERROR("glClearBufferiv is not supported in OpenGL es 2.0\n");
338   }
339
340   void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) override
341   {
342     DALI_LOG_ERROR("glClearBufferuiv is not supported in OpenGL es 2.0\n");
343   }
344
345   void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) override
346   {
347     DALI_LOG_ERROR("glClearBufferfv is not supported in OpenGL es 2.0\n");
348   }
349
350   void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override
351   {
352     DALI_LOG_ERROR("glClearBufferfi is not supported in OpenGL es 2.0\n");
353   }
354
355   const GLubyte* GetStringi(GLenum name, GLuint index) override
356   {
357     DALI_LOG_ERROR("glGetStringi is not supported in OpenGL es 2.0\n");
358     return NULL;
359   }
360
361   void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) override
362   {
363     DALI_LOG_ERROR("glCopyBufferSubData is not supported in OpenGL es 2.0\n");
364   }
365
366   void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) override
367   {
368     DALI_LOG_ERROR("glGetUniformIndices is not supported in OpenGL es 2.0\n");
369   }
370
371   void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) override
372   {
373     DALI_LOG_ERROR("glGetActiveUniformsiv is not supported in OpenGL es 2.0\n");
374
375     int maxUniformNameLength = 0;
376     glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformNameLength);
377     char* name = new char[maxUniformNameLength + 1];
378
379     for(auto i = 0; i < uniformCount; ++i)
380     {
381       GLint  elementCount;
382       GLint  written;
383       GLenum type;
384       glGetActiveUniform(program, uniformIndices[i], maxUniformNameLength, &written, &elementCount, &type, name);
385
386       if(pname == GL_UNIFORM_TYPE)
387       {
388         params[i] = type;
389       }
390       else if(pname == GL_UNIFORM_SIZE)
391       {
392         params[i] = elementCount;
393       }
394       else if(pname == GL_UNIFORM_NAME_LENGTH)
395       {
396         params[i] = written;
397       }
398       else if(pname == GL_UNIFORM_BLOCK_INDEX)
399       {
400         params[i] = -1; // Not support
401       }
402       else if(pname == GL_UNIFORM_OFFSET)
403       {
404         params[i] = 0; // Not support
405       }
406     }
407     delete[] name;
408   }
409
410   GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) override
411   {
412     DALI_LOG_ERROR("glGetUniformBlockIndex is not supported in OpenGL es 2.0\n");
413     return 0;
414   }
415
416   void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) override
417   {
418     DALI_LOG_ERROR("glGetActiveUniformBlockiv is not supported in OpenGL es 2.0\n");
419   }
420
421   void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) override
422   {
423     DALI_LOG_ERROR("glGetActiveUniformBlockName is not supported in OpenGL es 2.0\n");
424   }
425
426   void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) override
427   {
428     DALI_LOG_ERROR("glUniformBlockBinding is not supported in OpenGL es 2.0\n");
429   }
430
431   void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override
432   {
433     DALI_LOG_ERROR("glDrawArraysInstanced is not supported in OpenGL es 2.0\n");
434   }
435
436   void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) override
437   {
438     DALI_LOG_ERROR("glDrawElementsInstanced is not supported in OpenGL es 2.0\n");
439   }
440
441   GLsync FenceSync(GLenum condition, GLbitfield flags) override
442   {
443     DALI_LOG_ERROR("glFenceSync is not supported in OpenGL es 2.0\n");
444     return NULL;
445   }
446
447   GLboolean IsSync(GLsync sync) override
448   {
449     DALI_LOG_ERROR("glIsSync is not supported in OpenGL es 2.0\n");
450     return 0;
451   }
452
453   void DeleteSync(GLsync sync) override
454   {
455     DALI_LOG_ERROR("glDeleteSync is not supported in OpenGL es 2.0\n");
456   }
457
458   GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
459   {
460     DALI_LOG_ERROR("glClientWaitSync is not supported in OpenGL es 2.0\n");
461     return 0;
462   }
463
464   void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
465   {
466     DALI_LOG_ERROR("glWaitSync is not supported in OpenGL es 2.0\n");
467   }
468
469   void GetInteger64v(GLenum pname, GLint64* params) override
470   {
471     DALI_LOG_ERROR("glGetInteger64v is not supported in OpenGL es 2.0\n");
472   }
473
474   void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) override
475   {
476     DALI_LOG_ERROR("glGetSynciv is not supported in OpenGL es 2.0\n");
477   }
478
479   void GetInteger64i_v(GLenum target, GLuint index, GLint64* data) override
480   {
481     DALI_LOG_ERROR("glGetInteger64i_v is not supported in OpenGL es 2.0\n");
482   }
483
484   void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) override
485   {
486     DALI_LOG_ERROR("glGetBufferParameteri64v is not supported in OpenGL es 2.0\n");
487   }
488
489   void GenSamplers(GLsizei count, GLuint* samplers) override
490   {
491     DALI_LOG_ERROR("glGenSamplers is not supported in OpenGL es 2.0\n");
492   }
493
494   void DeleteSamplers(GLsizei count, const GLuint* samplers) override
495   {
496     DALI_LOG_ERROR("glDeleteSamplers is not supported in OpenGL es 2.0\n");
497   }
498
499   GLboolean IsSampler(GLuint sampler) override
500   {
501     DALI_LOG_ERROR("glIsSampler is not supported in OpenGL es 2.0\n");
502     return 0;
503   }
504
505   void BindSampler(GLuint unit, GLuint sampler) override
506   {
507     DALI_LOG_ERROR("glBindSampler is not supported in OpenGL es 2.0\n");
508   }
509
510   void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override
511   {
512     DALI_LOG_ERROR("glSamplerParameteri is not supported in OpenGL es 2.0\n");
513   }
514
515   void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) override
516   {
517     DALI_LOG_ERROR("glSamplerParameteriv is not supported in OpenGL es 2.0\n");
518   }
519
520   void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override
521   {
522     DALI_LOG_ERROR("glSamplerParameterf is not supported in OpenGL es 2.0\n");
523   }
524
525   void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) override
526   {
527     DALI_LOG_ERROR("glSamplerParameterfv is not supported in OpenGL es 2.0\n");
528   }
529
530   void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) override
531   {
532     DALI_LOG_ERROR("glGetSamplerParameteriv is not supported in OpenGL es 2.0\n");
533   }
534
535   void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) override
536   {
537     DALI_LOG_ERROR("glGetSamplerParameterfv is not supported in OpenGL es 2.0\n");
538   }
539
540   void VertexAttribDivisor(GLuint index, GLuint divisor) override
541   {
542     DALI_LOG_ERROR("glVertexAttribDivisor is not supported in OpenGL es 2.0\n");
543   }
544
545   void BindTransformFeedback(GLenum target, GLuint id) override
546   {
547     DALI_LOG_ERROR("glBindTransformFeedback is not supported in OpenGL es 2.0\n");
548   }
549
550   void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override
551   {
552     DALI_LOG_ERROR("glDeleteTransformFeedbacks is not supported in OpenGL es 2.0\n");
553   }
554
555   void GenTransformFeedbacks(GLsizei n, GLuint* ids) override
556   {
557     DALI_LOG_ERROR("glGenTransformFeedbacks is not supported in OpenGL es 2.0\n");
558   }
559
560   GLboolean IsTransformFeedback(GLuint id) override
561   {
562     DALI_LOG_ERROR("glIsTransformFeedback is not supported in OpenGL es 2.0\n");
563     return 0;
564   }
565
566   void PauseTransformFeedback(void) override
567   {
568     DALI_LOG_ERROR("glPauseTransformFeedback is not supported in OpenGL es 2.0\n");
569   }
570
571   void ResumeTransformFeedback(void) override
572   {
573     DALI_LOG_ERROR("glResumeTransformFeedback is not supported in OpenGL es 2.0\n");
574   }
575
576   void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override
577   {
578     mGlExtensions.GetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
579   }
580
581   void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) override
582   {
583     mGlExtensions.ProgramBinaryOES(program, binaryFormat, binary, length);
584   }
585
586   void ProgramParameteri(GLuint program, GLenum pname, GLint value) override
587   {
588     DALI_LOG_ERROR("glProgramParameteri is not supported in OpenGL es 2.0\n");
589   }
590
591   void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) override
592   {
593     mGlExtensions.DiscardFrameBuffer(target, numAttachments, attachments);
594   }
595
596   void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) override
597   {
598     DALI_LOG_ERROR("glInvalidateSubFramebuffer is not supported in OpenGL es 2.0\n");
599   }
600
601   void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) override
602   {
603     DALI_LOG_ERROR("glTexStorage2D is not supported in OpenGL es 2.0\n");
604   }
605
606   void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) override
607   {
608     DALI_LOG_ERROR("glTexStorage3D is not supported in OpenGL es 2.0\n");
609   }
610
611   void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) override
612   {
613     DALI_LOG_ERROR("glGetInternalformativ is not supported in OpenGL es 2.0\n");
614   }
615
616   void BlendBarrier(void) override
617   {
618     DALI_LOG_ERROR("BlendBarrier is not supported in OpenGL es 2.0\n");
619   }
620
621 private:
622   GlExtensions mGlExtensions;
623 };
624
625 } // namespace Adaptor
626
627 } // namespace Internal
628
629 } // namespace Dali
630
631 #endif // DALI_INTERNAL_GLES2_IMPLEMENTATION_H