NullGlesDriver.cpp revision 8bd5edf804d5995fe266f3f612b70ee0ee104130
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 19namespace android { 20namespace uirenderer { 21namespace debug { 22 23struct { 24 GLboolean scissorEnabled; 25} gState; 26 27static void nullglGenCommon(GLsizei n, GLuint *buffers) { 28 static GLuint nextId = 0; 29 int i; 30 for(i = 0; i < n; i++) { 31 buffers[i] = ++nextId; 32 } 33} 34 35void NullGlesDriver::glGenBuffers_(GLsizei n, GLuint *buffers) { 36 nullglGenCommon(n, buffers); 37} 38 39void NullGlesDriver::glGenFramebuffers_(GLsizei n, GLuint *framebuffers) { 40 nullglGenCommon(n, framebuffers); 41} 42 43void NullGlesDriver::glGenRenderbuffers_(GLsizei n, GLuint *renderbuffers) { 44 nullglGenCommon(n, renderbuffers); 45} 46 47void NullGlesDriver::glGenTextures_(GLsizei n, GLuint *textures) { 48 nullglGenCommon(n, textures); 49} 50 51GLuint NullGlesDriver::glCreateProgram_(void) { 52 static GLuint nextProgram = 0; 53 return ++nextProgram; 54} 55 56GLuint NullGlesDriver::glCreateShader_(GLenum type) { 57 static GLuint nextShader = 0; 58 return ++nextShader; 59} 60 61void NullGlesDriver::glGetProgramiv_(GLuint program, GLenum pname, GLint *params) { 62 switch (pname) { 63 case GL_DELETE_STATUS: 64 case GL_LINK_STATUS: 65 case GL_VALIDATE_STATUS: 66 *params = GL_TRUE; 67 break; 68 case GL_INFO_LOG_LENGTH: 69 *params = 16; 70 break; 71 } 72} 73 74void NullGlesDriver::glGetProgramInfoLog_(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) { 75 *length = snprintf(infoLog, bufSize, "success"); 76 if (*length >= bufSize) { 77 *length = bufSize - 1; 78 } 79} 80 81void NullGlesDriver::glGetShaderiv_(GLuint shader, GLenum pname, GLint *params) { 82 switch (pname) { 83 case GL_COMPILE_STATUS: 84 case GL_DELETE_STATUS: 85 *params = GL_TRUE; 86 } 87} 88 89void NullGlesDriver::glGetShaderInfoLog_(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) { 90 *length = snprintf(infoLog, bufSize, "success"); 91 if (*length >= bufSize) { 92 *length = bufSize - 1; 93 } 94} 95 96void setBooleanState(GLenum cap, GLboolean value) { 97 switch (cap) { 98 case GL_SCISSOR_TEST: 99 gState.scissorEnabled = value; 100 break; 101 } 102} 103 104void NullGlesDriver::glEnable_(GLenum cap) { 105 setBooleanState(cap, GL_TRUE); 106} 107 108void NullGlesDriver::glDisable_(GLenum cap) { 109 setBooleanState(cap, GL_FALSE); 110} 111 112GLboolean NullGlesDriver::glIsEnabled_(GLenum cap) { 113 switch (cap) { 114 case GL_SCISSOR_TEST: 115 return gState.scissorEnabled; 116 default: 117 return GL_FALSE; 118 } 119} 120 121void NullGlesDriver::glGetIntegerv_(GLenum pname, GLint *data) { 122 switch (pname) { 123 case GL_MAX_TEXTURE_SIZE: 124 *data = 2048; 125 break; 126 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 127 *data = 4; 128 break; 129 default: 130 *data = 0; 131 } 132} 133 134GLenum NullGlesDriver::glCheckFramebufferStatus_(GLenum target) { 135 switch (target) { 136 case GL_FRAMEBUFFER: 137 return GL_FRAMEBUFFER_COMPLETE; 138 default: 139 return 0; // error case 140 } 141} 142 143static const char* getString(GLenum name) { 144 switch (name) { 145 case GL_VENDOR: 146 return "android"; 147 case GL_RENDERER: 148 return "null"; 149 case GL_VERSION: 150 return "OpenGL ES 2.0 rev1"; 151 case GL_SHADING_LANGUAGE_VERSION: 152 return "OpenGL ES GLSL ES 2.0 rev1"; 153 case GL_EXTENSIONS: 154 default: 155 return ""; 156 } 157} 158 159const GLubyte* NullGlesDriver::glGetString_(GLenum name) { 160 return (GLubyte*) getString(name); 161} 162 163} // namespace debug 164} // namespace uirenderer 165} // namespace android 166