| /* |
| * Copyright(C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0(the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include <GLES3/gl3.h> |
| #include <GLES2/gl2ext.h> |
| |
| #include <stdlib.h> |
| #include <string.h> |
| |
| struct { |
| GLboolean scissorEnabled; |
| } gState; |
| |
| void glGenCommon(GLsizei n, GLuint *buffers) { |
| static GLuint nextId = 0; |
| int i; |
| for(i = 0; i < n; i++) { |
| buffers[i] = ++nextId; |
| } |
| } |
| |
| void glGenBuffers(GLsizei n, GLuint *buffers) { |
| glGenCommon(n, buffers); |
| } |
| |
| void glGenFramebuffers(GLsizei n, GLuint *framebuffers) { |
| glGenCommon(n, framebuffers); |
| } |
| |
| void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers) { |
| glGenCommon(n, renderbuffers); |
| } |
| |
| void glGenTextures(GLsizei n, GLuint *textures) { |
| glGenCommon(n, textures); |
| } |
| |
| GLuint glCreateProgram(void) { |
| static GLuint nextProgram = 0; |
| return ++nextProgram; |
| } |
| |
| GLuint glCreateShader(GLenum type) { |
| static GLuint nextShader = 0; |
| return ++nextShader; |
| } |
| |
| void glGetProgramiv(GLuint program, GLenum pname, GLint *params) { |
| switch (pname) { |
| case GL_DELETE_STATUS: |
| case GL_LINK_STATUS: |
| case GL_VALIDATE_STATUS: |
| *params = GL_TRUE; |
| break; |
| case GL_INFO_LOG_LENGTH: |
| *params = 16; |
| break; |
| } |
| } |
| |
| void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) { |
| *length = snprintf(infoLog, bufSize, "success"); |
| if (*length >= bufSize) { |
| *length = bufSize - 1; |
| } |
| } |
| |
| void glGetShaderiv(GLuint shader, GLenum pname, GLint *params) { |
| switch (pname) { |
| case GL_COMPILE_STATUS: |
| case GL_DELETE_STATUS: |
| *params = GL_TRUE; |
| } |
| } |
| |
| void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) { |
| *length = snprintf(infoLog, bufSize, "success"); |
| if (*length >= bufSize) { |
| *length = bufSize - 1; |
| } |
| } |
| |
| void setBooleanState(GLenum cap, GLboolean value) { |
| switch (cap) { |
| case GL_SCISSOR_TEST: |
| gState.scissorEnabled = value; |
| break; |
| } |
| } |
| |
| void glEnable(GLenum cap) { |
| setBooleanState(cap, GL_TRUE); |
| } |
| |
| void glDisable(GLenum cap) { |
| setBooleanState(cap, GL_FALSE); |
| } |
| |
| GLboolean glIsEnabled(GLenum cap) { |
| switch (cap) { |
| case GL_SCISSOR_TEST: |
| return gState.scissorEnabled; |
| default: |
| return GL_FALSE; |
| } |
| } |
| |
| void glGetIntegerv(GLenum pname, GLint *data) { |
| switch (pname) { |
| case GL_MAX_TEXTURE_SIZE: |
| *data = 2048; |
| break; |
| case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: |
| *data = 4; |
| break; |
| default: |
| *data = 0; |
| } |
| } |
| |
| const char* getString(GLenum name) { |
| switch (name) { |
| case GL_VENDOR: |
| return "android"; |
| case GL_RENDERER: |
| return "null"; |
| case GL_VERSION: |
| return "OpenGL ES 2.0 rev1"; |
| case GL_SHADING_LANGUAGE_VERSION: |
| return "OpenGL ES GLSL ES 2.0 rev1"; |
| case GL_EXTENSIONS: |
| default: |
| return ""; |
| } |
| } |
| |
| const GLubyte* glGetString(GLenum name) { |
| return (GLubyte*) getString(name); |
| } |
| |
| void glActiveTexture(GLenum texture) {} |
| void glAttachShader(GLuint program, GLuint shader) {} |
| void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name) {} |
| void glBindBuffer(GLenum target, GLuint buffer) {} |
| void glBindFramebuffer(GLenum target, GLuint framebuffer) {} |
| void glBindRenderbuffer(GLenum target, GLuint renderbuffer) {} |
| void glBindTexture(GLenum target, GLuint texture) {} |
| void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {} |
| void glBlendEquation(GLenum mode) {} |
| void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {} |
| void glBlendFunc(GLenum sfactor, GLenum dfactor) {} |
| void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {} |
| void glBufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage) {} |
| void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data) {} |
| void glClear(GLbitfield mask) {} |
| void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {} |
| void glClearDepthf(GLfloat d) {} |
| void glClearStencil(GLint s) {} |
| void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {} |
| void glCompileShader(GLuint shader) {} |
| void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) {} |
| void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) {} |
| void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {} |
| void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {} |
| void glCullFace(GLenum mode) {} |
| void glDeleteBuffers(GLsizei n, const GLuint *buffers) {} |
| void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) {} |
| void glDeleteProgram(GLuint program) {} |
| void glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers) {} |
| void glDeleteShader(GLuint shader) {} |
| void glDeleteTextures(GLsizei n, const GLuint *textures) {} |
| void glDepthFunc(GLenum func) {} |
| void glDepthMask(GLboolean flag) {} |
| void glDepthRangef(GLfloat n, GLfloat f) {} |
| void glDetachShader(GLuint program, GLuint shader) {} |
| void glDisableVertexAttribArray(GLuint index) {} |
| void glDrawArrays(GLenum mode, GLint first, GLsizei count) {} |
| void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {} |
| void glEnableVertexAttribArray(GLuint index) {} |
| void glFinish(void) {} |
| void glFlush(void) {} |
| void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {} |
| void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {} |
| void glFrontFace(GLenum mode) {} |
| void glGenerateMipmap(GLenum target) {} |
| GLint glGetAttribLocation(GLuint program, const GLchar *name) { return 1; } |
| GLenum glGetError(void) { return GL_NO_ERROR; } |
| GLint glGetUniformLocation(GLuint program, const GLchar *name) { return 2; } |
| void glHint(GLenum target, GLenum mode) {} |
| void glLineWidth(GLfloat width) {} |
| void glLinkProgram(GLuint program) {} |
| void glPixelStorei(GLenum pname, GLint param) {} |
| void glPolygonOffset(GLfloat factor, GLfloat units) {} |
| void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels) {} |
| void glReleaseShaderCompiler(void) {} |
| void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {} |
| void glSampleCoverage(GLfloat value, GLboolean invert) {} |
| void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {} |
| void glShaderBinary(GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length) {} |
| void glShaderSource(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length) {} |
| void glStencilFunc(GLenum func, GLint ref, GLuint mask) {} |
| void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {} |
| void glStencilMask(GLuint mask) {} |
| void glStencilMaskSeparate(GLenum face, GLuint mask) {} |
| void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {} |
| void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) {} |
| void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels) {} |
| void glTexParameterf(GLenum target, GLenum pname, GLfloat param) {} |
| void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params) {} |
| void glTexParameteri(GLenum target, GLenum pname, GLint param) {} |
| void glTexParameteriv(GLenum target, GLenum pname, const GLint *params) {} |
| void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels) {} |
| void glUniform1f(GLint location, GLfloat v0) {} |
| void glUniform1fv(GLint location, GLsizei count, const GLfloat *value) {} |
| void glUniform1i(GLint location, GLint v0) {} |
| void glUniform1iv(GLint location, GLsizei count, const GLint *value) {} |
| void glUniform2f(GLint location, GLfloat v0, GLfloat v1) {} |
| void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) {} |
| void glUniform2i(GLint location, GLint v0, GLint v1) {} |
| void glUniform2iv(GLint location, GLsizei count, const GLint *value) {} |
| void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {} |
| void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) {} |
| void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {} |
| void glUniform3iv(GLint location, GLsizei count, const GLint *value) {} |
| void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {} |
| void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) {} |
| void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {} |
| void glUniform4iv(GLint location, GLsizei count, const GLint *value) {} |
| void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {} |
| void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {} |
| void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {} |
| void glUseProgram(GLuint program) {} |
| void glValidateProgram(GLuint program) {} |
| void glVertexAttrib1f(GLuint index, GLfloat x) {} |
| void glVertexAttrib1fv(GLuint index, const GLfloat *v) {} |
| void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) {} |
| void glVertexAttrib2fv(GLuint index, const GLfloat *v) {} |
| void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) {} |
| void glVertexAttrib3fv(GLuint index, const GLfloat *v) {} |
| void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {} |
| void glVertexAttrib4fv(GLuint index, const GLfloat *v) {} |
| void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer) {} |
| void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {} |
| |
| |
| // gles2 ext |
| void glInsertEventMarkerEXT(GLsizei length, const GLchar *marker) {} |
| void glPushGroupMarkerEXT(GLsizei length, const GLchar *marker) {} |
| void glPopGroupMarkerEXT(void) {} |
| void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments) {} |
| void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) {} |
| void glEndTilingQCOM(GLbitfield preserveMask) {} |
| void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) {} |
| |
| // GLES3 |
| void* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) { |
| return 0; |
| } |
| |
| GLboolean glUnmapBuffer(GLenum target) { |
| return GL_FALSE; |
| } |