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