1 #ifndef _SGLRCONTEXTWRAPPER_HPP 2 #define _SGLRCONTEXTWRAPPER_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program OpenGL ES Utilities 5 * ------------------------------------------------ 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Context wrapper that exposes sglr API as GL-compatible API. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 #include "tcuVector.hpp" 28 29 namespace sglr 30 { 31 32 class Shader; 33 class Context; 34 35 class ContextWrapper 36 { 37 public: 38 ContextWrapper(void); 39 ~ContextWrapper(void); 40 41 void setContext(Context *context); 42 Context *getCurrentContext(void) const; 43 44 int getWidth(void) const; 45 int getHeight(void) const; 46 47 // GL-compatible API. 48 void glActiveTexture(uint32_t texture); 49 void glAttachShader(uint32_t program, uint32_t shader); 50 void glBindAttribLocation(uint32_t program, uint32_t index, const char *name); 51 void glBindBuffer(uint32_t target, uint32_t buffer); 52 void glBindFramebuffer(uint32_t target, uint32_t framebuffer); 53 void glBindRenderbuffer(uint32_t target, uint32_t renderbuffer); 54 void glBindTexture(uint32_t target, uint32_t texture); 55 void glBlendColor(float red, float green, float blue, float alpha); 56 void glBlendEquation(uint32_t mode); 57 void glBlendEquationSeparate(uint32_t modeRGB, uint32_t modeAlpha); 58 void glBlendFunc(uint32_t sfactor, uint32_t dfactor); 59 void glBlendFuncSeparate(uint32_t srcRGB, uint32_t dstRGB, uint32_t srcAlpha, uint32_t dstAlpha); 60 void glBufferData(uint32_t target, intptr_t size, const void *data, uint32_t usage); 61 void glBufferSubData(uint32_t target, intptr_t offset, intptr_t size, const void *data); 62 uint32_t glCheckFramebufferStatus(uint32_t target); 63 void glClear(uint32_t mask); 64 void glClearColor(float red, float green, float blue, float alpha); 65 void glClearDepthf(float depth); 66 void glClearStencil(int s); 67 void glColorMask(bool red, bool green, bool blue, bool alpha); 68 void glCompileShader(uint32_t shader); 69 void glCompressedTexImage2D(uint32_t target, int level, uint32_t internalformat, int width, int height, int border, 70 int imageSize, const void *data); 71 void glCompressedTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height, 72 uint32_t format, int imageSize, const void *data); 73 void glCopyTexImage1D(uint32_t target, int level, uint32_t internalformat, int x, int y, int width, int border); 74 void glCopyTexImage2D(uint32_t target, int level, uint32_t internalformat, int x, int y, int width, int height, 75 int border); 76 void glCopyTexSubImage1D(uint32_t target, int level, int xoffset, int x, int y, int width); 77 void glCopyTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int x, int y, int width, int height); 78 uint32_t glCreateProgram(); 79 uint32_t glCreateShader(uint32_t type); 80 void glCullFace(uint32_t mode); 81 void glDeleteBuffers(int n, const uint32_t *buffers); 82 void glDeleteFramebuffers(int n, const uint32_t *framebuffers); 83 void glDeleteProgram(uint32_t program); 84 void glDeleteRenderbuffers(int n, const uint32_t *renderbuffers); 85 void glDeleteShader(uint32_t shader); 86 void glDeleteTextures(int n, const uint32_t *textures); 87 void glDepthFunc(uint32_t func); 88 void glDepthMask(bool flag); 89 void glDepthRangef(float n, float f); 90 void glDetachShader(uint32_t program, uint32_t shader); 91 void glDisable(uint32_t cap); 92 void glDisableVertexAttribArray(uint32_t index); 93 void glDrawArrays(uint32_t mode, int first, int count); 94 void glDrawElements(uint32_t mode, int count, uint32_t type, const void *indices); 95 void glEnable(uint32_t cap); 96 void glEnableVertexAttribArray(uint32_t index); 97 void glFinish(); 98 void glFlush(); 99 void glFramebufferRenderbuffer(uint32_t target, uint32_t attachment, uint32_t renderbuffertarget, 100 uint32_t renderbuffer); 101 void glFramebufferTexture2D(uint32_t target, uint32_t attachment, uint32_t textarget, uint32_t texture, int level); 102 void glFrontFace(uint32_t mode); 103 void glGenBuffers(int n, uint32_t *buffers); 104 void glGenerateMipmap(uint32_t target); 105 void glGenFramebuffers(int n, uint32_t *framebuffers); 106 void glGenRenderbuffers(int n, uint32_t *renderbuffers); 107 void glGenTextures(int n, uint32_t *textures); 108 void glGetActiveAttrib(uint32_t program, uint32_t index, int bufsize, int *length, int *size, uint32_t *type, 109 char *name); 110 void glGetActiveUniform(uint32_t program, uint32_t index, int bufsize, int *length, int *size, uint32_t *type, 111 char *name); 112 void glGetAttachedShaders(uint32_t program, int maxcount, int *count, uint32_t *shaders); 113 int glGetAttribLocation(uint32_t program, const char *name); 114 void glGetBooleanv(uint32_t pname, bool *params); 115 void glGetBufferParameteriv(uint32_t target, uint32_t pname, int *params); 116 uint32_t glGetError(); 117 void glGetFloatv(uint32_t pname, float *params); 118 void glGetFramebufferAttachmentParameteriv(uint32_t target, uint32_t attachment, uint32_t pname, int *params); 119 void glGetIntegerv(uint32_t pname, int *params); 120 void glGetProgramiv(uint32_t program, uint32_t pname, int *params); 121 void glGetProgramInfoLog(uint32_t program, int bufsize, int *length, char *infolog); 122 void glGetRenderbufferParameteriv(uint32_t target, uint32_t pname, int *params); 123 void glGetShaderiv(uint32_t shader, uint32_t pname, int *params); 124 void glGetShaderInfoLog(uint32_t shader, int bufsize, int *length, char *infolog); 125 void glGetShaderPrecisionFormat(uint32_t shadertype, uint32_t precisiontype, int *range, int *precision); 126 void glGetShaderSource(uint32_t shader, int bufsize, int *length, char *source); 127 const uint8_t *glGetString(uint32_t name); 128 void glGetTexParameterfv(uint32_t target, uint32_t pname, float *params); 129 void glGetTexParameteriv(uint32_t target, uint32_t pname, int *params); 130 void glGetUniformfv(uint32_t program, int location, float *params); 131 void glGetUniformiv(uint32_t program, int location, int *params); 132 int glGetUniformLocation(uint32_t program, const char *name); 133 void glGetVertexAttribfv(uint32_t index, uint32_t pname, float *params); 134 void glGetVertexAttribiv(uint32_t index, uint32_t pname, int *params); 135 void glGetVertexAttribPointerv(uint32_t index, uint32_t pname, void **pointer); 136 void glHint(uint32_t target, uint32_t mode); 137 bool glIsBuffer(uint32_t buffer); 138 bool glIsEnabled(uint32_t cap); 139 bool glIsFramebuffer(uint32_t framebuffer); 140 bool glIsProgram(uint32_t program); 141 bool glIsRenderbuffer(uint32_t renderbuffer); 142 bool glIsShader(uint32_t shader); 143 bool glIsTexture(uint32_t texture); 144 void glLineWidth(float width); 145 void glLinkProgram(uint32_t program); 146 void glPixelStorei(uint32_t pname, int param); 147 void glPolygonOffset(float factor, float units); 148 void glReadPixels(int x, int y, int width, int height, uint32_t format, uint32_t type, void *pixels); 149 void glReleaseShaderCompiler(); 150 void glRenderbufferStorage(uint32_t target, uint32_t internalformat, int width, int height); 151 void glSampleCoverage(float value, bool invert); 152 void glScissor(int x, int y, int width, int height); 153 void glShaderBinary(int n, const uint32_t *shaders, uint32_t binaryformat, const void *binary, int length); 154 void glShaderSource(uint32_t shader, int count, const char *const *string, const int *length); 155 void glStencilFunc(uint32_t func, int ref, uint32_t mask); 156 void glStencilFuncSeparate(uint32_t face, uint32_t func, int ref, uint32_t mask); 157 void glStencilMask(uint32_t mask); 158 void glStencilMaskSeparate(uint32_t face, uint32_t mask); 159 void glStencilOp(uint32_t fail, uint32_t zfail, uint32_t zpass); 160 void glStencilOpSeparate(uint32_t face, uint32_t fail, uint32_t zfail, uint32_t zpass); 161 void glTexImage1D(uint32_t target, int level, int internalformat, int width, int border, uint32_t format, 162 uint32_t type, const void *pixels); 163 void glTexImage2D(uint32_t target, int level, int internalformat, int width, int height, int border, 164 uint32_t format, uint32_t type, const void *pixels); 165 void glTexParameterf(uint32_t target, uint32_t pname, float param); 166 void glTexParameterfv(uint32_t target, uint32_t pname, const float *params); 167 void glTexParameteri(uint32_t target, uint32_t pname, int param); 168 void glTexParameteriv(uint32_t target, uint32_t pname, const int *params); 169 void glTexSubImage1D(uint32_t target, int level, int xoffset, int width, uint32_t format, uint32_t type, 170 const void *pixels); 171 void glTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height, uint32_t format, 172 uint32_t type, const void *pixels); 173 void glUniform1f(int location, float x); 174 void glUniform1fv(int location, int count, const float *v); 175 void glUniform1i(int location, int x); 176 void glUniform1iv(int location, int count, const int *v); 177 void glUniform2f(int location, float x, float y); 178 void glUniform2fv(int location, int count, const float *v); 179 void glUniform2i(int location, int x, int y); 180 void glUniform2iv(int location, int count, const int *v); 181 void glUniform3f(int location, float x, float y, float z); 182 void glUniform3fv(int location, int count, const float *v); 183 void glUniform3i(int location, int x, int y, int z); 184 void glUniform3iv(int location, int count, const int *v); 185 void glUniform4f(int location, float x, float y, float z, float w); 186 void glUniform4fv(int location, int count, const float *v); 187 void glUniform4i(int location, int x, int y, int z, int w); 188 void glUniform4iv(int location, int count, const int *v); 189 void glUniformMatrix2fv(int location, int count, bool transpose, const float *value); 190 void glUniformMatrix3fv(int location, int count, bool transpose, const float *value); 191 void glUniformMatrix4fv(int location, int count, bool transpose, const float *value); 192 void glUseProgram(uint32_t program); 193 void glValidateProgram(uint32_t program); 194 void glVertexAttrib1f(uint32_t indx, float x); 195 void glVertexAttrib1fv(uint32_t indx, const float *values); 196 void glVertexAttrib2f(uint32_t indx, float x, float y); 197 void glVertexAttrib2fv(uint32_t indx, const float *values); 198 void glVertexAttrib3f(uint32_t indx, float x, float y, float z); 199 void glVertexAttrib3fv(uint32_t indx, const float *values); 200 void glVertexAttrib4f(uint32_t indx, float x, float y, float z, float w); 201 void glVertexAttrib4fv(uint32_t indx, const float *values); 202 void glVertexAttribPointer(uint32_t indx, int size, uint32_t type, bool normalized, int stride, const void *ptr); 203 void glViewport(int x, int y, int width, int height); 204 void glReadBuffer(uint32_t mode); 205 void glDrawRangeElements(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type, 206 const void *indices); 207 void glTexImage3D(uint32_t target, int level, int internalformat, int width, int height, int depth, int border, 208 uint32_t format, uint32_t type, const void *pixels); 209 void glTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width, int height, 210 int depth, uint32_t format, uint32_t type, const void *pixels); 211 void glCopyTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, 212 int height); 213 void glCompressedTexImage3D(uint32_t target, int level, uint32_t internalformat, int width, int height, int depth, 214 int border, int imageSize, const void *data); 215 void glCompressedTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width, 216 int height, int depth, uint32_t format, int imageSize, const void *data); 217 void glGenQueries(int n, uint32_t *ids); 218 void glDeleteQueries(int n, const uint32_t *ids); 219 bool glIsQuery(uint32_t id); 220 void glBeginQuery(uint32_t target, uint32_t id); 221 void glEndQuery(uint32_t target); 222 void glGetQueryiv(uint32_t target, uint32_t pname, int *params); 223 void glGetQueryObjectuiv(uint32_t id, uint32_t pname, uint32_t *params); 224 bool glUnmapBuffer(uint32_t target); 225 void glGetBufferPointerv(uint32_t target, uint32_t pname, void **params); 226 void glDrawBuffers(int n, const uint32_t *bufs); 227 void glUniformMatrix2x3fv(int location, int count, bool transpose, const float *value); 228 void glUniformMatrix3x2fv(int location, int count, bool transpose, const float *value); 229 void glUniformMatrix2x4fv(int location, int count, bool transpose, const float *value); 230 void glUniformMatrix4x2fv(int location, int count, bool transpose, const float *value); 231 void glUniformMatrix3x4fv(int location, int count, bool transpose, const float *value); 232 void glUniformMatrix4x3fv(int location, int count, bool transpose, const float *value); 233 void glBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, 234 uint32_t mask, uint32_t filter); 235 void glRenderbufferStorageMultisample(uint32_t target, int samples, uint32_t internalformat, int width, int height); 236 void glFramebufferTextureLayer(uint32_t target, uint32_t attachment, uint32_t texture, int level, int layer); 237 void *glMapBufferRange(uint32_t target, intptr_t offset, intptr_t length, uint32_t access); 238 void glFlushMappedBufferRange(uint32_t target, intptr_t offset, intptr_t length); 239 void glBindVertexArray(uint32_t array); 240 void glDeleteVertexArrays(int n, const uint32_t *arrays); 241 void glGenVertexArrays(int n, uint32_t *arrays); 242 bool glIsVertexArray(uint32_t array); 243 void glGetIntegeri_v(uint32_t target, uint32_t index, int *data); 244 void glBeginTransformFeedback(uint32_t primitiveMode); 245 void glEndTransformFeedback(); 246 void glBindBufferRange(uint32_t target, uint32_t index, uint32_t buffer, intptr_t offset, intptr_t size); 247 void glBindBufferBase(uint32_t target, uint32_t index, uint32_t buffer); 248 void glTransformFeedbackVaryings(uint32_t program, int count, const char *const *varyings, uint32_t bufferMode); 249 void glGetTransformFeedbackVarying(uint32_t program, uint32_t index, int bufSize, int *length, int *size, 250 uint32_t *type, char *name); 251 void glVertexAttribIPointer(uint32_t index, int size, uint32_t type, int stride, const void *pointer); 252 void glGetVertexAttribIiv(uint32_t index, uint32_t pname, int *params); 253 void glGetVertexAttribIuiv(uint32_t index, uint32_t pname, uint32_t *params); 254 void glVertexAttribI4i(uint32_t index, int x, int y, int z, int w); 255 void glVertexAttribI4ui(uint32_t index, uint32_t x, uint32_t y, uint32_t z, uint32_t w); 256 void glVertexAttribI4iv(uint32_t index, const int *v); 257 void glVertexAttribI4uiv(uint32_t index, const uint32_t *v); 258 void glGetUniformuiv(uint32_t program, int location, uint32_t *params); 259 int glGetFragDataLocation(uint32_t program, const char *name); 260 void glUniform1ui(int location, uint32_t v0); 261 void glUniform2ui(int location, uint32_t v0, uint32_t v1); 262 void glUniform3ui(int location, uint32_t v0, uint32_t v1, uint32_t v2); 263 void glUniform4ui(int location, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3); 264 void glUniform1uiv(int location, int count, const uint32_t *value); 265 void glUniform2uiv(int location, int count, const uint32_t *value); 266 void glUniform3uiv(int location, int count, const uint32_t *value); 267 void glUniform4uiv(int location, int count, const uint32_t *value); 268 void glClearBufferiv(uint32_t buffer, int drawbuffer, const int *value); 269 void glClearBufferuiv(uint32_t buffer, int drawbuffer, const uint32_t *value); 270 void glClearBufferfv(uint32_t buffer, int drawbuffer, const float *value); 271 void glClearBufferfi(uint32_t buffer, int drawbuffer, float depth, int stencil); 272 const uint8_t *glGetStringi(uint32_t name, uint32_t index); 273 void glCopyBufferSubData(uint32_t readTarget, uint32_t writeTarget, intptr_t readOffset, intptr_t writeOffset, 274 intptr_t size); 275 void glGetUniformIndices(uint32_t program, int uniformCount, const char *const *uniformNames, 276 uint32_t *uniformIndices); 277 void glGetActiveUniformsiv(uint32_t program, int uniformCount, const uint32_t *uniformIndices, uint32_t pname, 278 int *params); 279 uint32_t glGetUniformBlockIndex(uint32_t program, const char *uniformBlockName); 280 void glGetActiveUniformBlockiv(uint32_t program, uint32_t uniformBlockIndex, uint32_t pname, int *params); 281 void glGetActiveUniformBlockName(uint32_t program, uint32_t uniformBlockIndex, int bufSize, int *length, 282 char *uniformBlockName); 283 void glUniformBlockBinding(uint32_t program, uint32_t uniformBlockIndex, uint32_t uniformBlockBinding); 284 void glDrawArraysInstanced(uint32_t mode, int first, int count, int primcount); 285 void glDrawElementsInstanced(uint32_t mode, int count, uint32_t type, const void *indices, int primcount); 286 void *glFenceSync(uint32_t condition, uint32_t flags); 287 bool glIsSync(void *sync); 288 void glDeleteSync(void *sync); 289 uint32_t glClientWaitSync(void *sync, uint32_t flags, uint64_t timeout); 290 void glWaitSync(void *sync, uint32_t flags, uint64_t timeout); 291 void glGetInteger64v(uint32_t pname, int64_t *params); 292 void glGetSynciv(void *sync, uint32_t pname, int bufSize, int *length, int *values); 293 void glGetInteger64i_v(uint32_t target, uint32_t index, int64_t *data); 294 void glGetBufferParameteri64v(uint32_t target, uint32_t pname, int64_t *params); 295 void glGenSamplers(int count, uint32_t *samplers); 296 void glDeleteSamplers(int count, const uint32_t *samplers); 297 bool glIsSampler(uint32_t sampler); 298 void glBindSampler(uint32_t unit, uint32_t sampler); 299 void glSamplerParameteri(uint32_t sampler, uint32_t pname, int param); 300 void glSamplerParameteriv(uint32_t sampler, uint32_t pname, const int *param); 301 void glSamplerParameterf(uint32_t sampler, uint32_t pname, float param); 302 void glSamplerParameterfv(uint32_t sampler, uint32_t pname, const float *param); 303 void glGetSamplerParameteriv(uint32_t sampler, uint32_t pname, int *params); 304 void glGetSamplerParameterfv(uint32_t sampler, uint32_t pname, float *params); 305 void glVertexAttribDivisor(uint32_t index, uint32_t divisor); 306 void glBindTransformFeedback(uint32_t target, uint32_t id); 307 void glDeleteTransformFeedbacks(int n, const uint32_t *ids); 308 void glGenTransformFeedbacks(int n, uint32_t *ids); 309 bool glIsTransformFeedback(uint32_t id); 310 void glPauseTransformFeedback(); 311 void glResumeTransformFeedback(); 312 void glGetProgramBinary(uint32_t program, int bufSize, int *length, uint32_t *binaryFormat, void *binary); 313 void glProgramBinary(uint32_t program, uint32_t binaryFormat, const void *binary, int length); 314 void glProgramParameteri(uint32_t program, uint32_t pname, int value); 315 void glInvalidateFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments); 316 void glInvalidateSubFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments, int x, int y, 317 int width, int height); 318 void glTexStorage2D(uint32_t target, int levels, uint32_t internalformat, int width, int height); 319 void glTexStorage3D(uint32_t target, int levels, uint32_t internalformat, int width, int height, int depth); 320 void glGetInternalformativ(uint32_t target, uint32_t internalformat, uint32_t pname, int bufSize, int *params); 321 322 private: 323 Context *m_curCtx; 324 }; 325 326 } // namespace sglr 327 328 #endif // _SGLRCONTEXTWRAPPER_HPP 329