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