1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <debug/NullGlesDriver.h> 18 19 namespace android { 20 namespace uirenderer { 21 namespace debug { 22 23 sk_sp<const GrGLInterface> NullGlesDriver::getSkiaInterface() { 24 sk_sp<const GrGLInterface> skiaInterface(GrGLCreateNullInterface()); 25 return skiaInterface; 26 } 27 28 struct { 29 GLboolean scissorEnabled; 30 } gState; 31 32 static void nullglGenCommon(GLsizei n, GLuint* buffers) { 33 static GLuint nextId = 0; 34 int i; 35 for (i = 0; i < n; i++) { 36 buffers[i] = ++nextId; 37 } 38 } 39 40 void NullGlesDriver::glGenBuffers_(GLsizei n, GLuint* buffers) { 41 nullglGenCommon(n, buffers); 42 } 43 44 void NullGlesDriver::glGenFramebuffers_(GLsizei n, GLuint* framebuffers) { 45 nullglGenCommon(n, framebuffers); 46 } 47 48 void NullGlesDriver::glGenRenderbuffers_(GLsizei n, GLuint* renderbuffers) { 49 nullglGenCommon(n, renderbuffers); 50 } 51 52 void NullGlesDriver::glGenTextures_(GLsizei n, GLuint* textures) { 53 nullglGenCommon(n, textures); 54 } 55 56 GLuint NullGlesDriver::glCreateProgram_(void) { 57 static GLuint nextProgram = 0; 58 return ++nextProgram; 59 } 60 61 GLuint NullGlesDriver::glCreateShader_(GLenum type) { 62 static GLuint nextShader = 0; 63 return ++nextShader; 64 } 65 66 void NullGlesDriver::glGetProgramiv_(GLuint program, GLenum pname, GLint* params) { 67 switch (pname) { 68 case GL_DELETE_STATUS: 69 case GL_LINK_STATUS: 70 case GL_VALIDATE_STATUS: 71 *params = GL_TRUE; 72 break; 73 case GL_INFO_LOG_LENGTH: 74 *params = 16; 75 break; 76 } 77 } 78 79 void NullGlesDriver::glGetProgramInfoLog_(GLuint program, GLsizei bufSize, GLsizei* length, 80 GLchar* infoLog) { 81 *length = snprintf(infoLog, bufSize, "success"); 82 if (*length >= bufSize) { 83 *length = bufSize - 1; 84 } 85 } 86 87 void NullGlesDriver::glGetShaderiv_(GLuint shader, GLenum pname, GLint* params) { 88 switch (pname) { 89 case GL_COMPILE_STATUS: 90 case GL_DELETE_STATUS: 91 *params = GL_TRUE; 92 } 93 } 94 95 void NullGlesDriver::glGetShaderInfoLog_(GLuint shader, GLsizei bufSize, GLsizei* length, 96 GLchar* infoLog) { 97 *length = snprintf(infoLog, bufSize, "success"); 98 if (*length >= bufSize) { 99 *length = bufSize - 1; 100 } 101 } 102 103 void setBooleanState(GLenum cap, GLboolean value) { 104 switch (cap) { 105 case GL_SCISSOR_TEST: 106 gState.scissorEnabled = value; 107 break; 108 } 109 } 110 111 void NullGlesDriver::glEnable_(GLenum cap) { 112 setBooleanState(cap, GL_TRUE); 113 } 114 115 void NullGlesDriver::glDisable_(GLenum cap) { 116 setBooleanState(cap, GL_FALSE); 117 } 118 119 GLboolean NullGlesDriver::glIsEnabled_(GLenum cap) { 120 switch (cap) { 121 case GL_SCISSOR_TEST: 122 return gState.scissorEnabled; 123 default: 124 return GL_FALSE; 125 } 126 } 127 128 void NullGlesDriver::glGetIntegerv_(GLenum pname, GLint* data) { 129 switch (pname) { 130 case GL_MAX_TEXTURE_SIZE: 131 *data = 2048; 132 break; 133 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 134 *data = 4; 135 break; 136 default: 137 *data = 0; 138 } 139 } 140 141 GLenum NullGlesDriver::glCheckFramebufferStatus_(GLenum target) { 142 switch (target) { 143 case GL_FRAMEBUFFER: 144 return GL_FRAMEBUFFER_COMPLETE; 145 default: 146 return 0; // error case 147 } 148 } 149 150 static const char* getString(GLenum name) { 151 switch (name) { 152 case GL_VENDOR: 153 return "android"; 154 case GL_RENDERER: 155 return "null"; 156 case GL_VERSION: 157 return "OpenGL ES 2.0 rev1"; 158 case GL_SHADING_LANGUAGE_VERSION: 159 return "OpenGL ES GLSL ES 2.0 rev1"; 160 case GL_EXTENSIONS: 161 default: 162 return ""; 163 } 164 } 165 166 const GLubyte* NullGlesDriver::glGetString_(GLenum name) { 167 return (GLubyte*)getString(name); 168 } 169 170 } // namespace debug 171 } // namespace uirenderer 172 } // namespace android 173