blob: 134b575968ffd6e904b3a96e83aea5bedb288c88 [file] [log] [blame] [edit]
#ifndef _SGLRCONTEXTWRAPPER_HPP
#define _SGLRCONTEXTWRAPPER_HPP
/*-------------------------------------------------------------------------
* drawElements Quality Program OpenGL ES Utilities
* ------------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Context wrapper that exposes sglr API as GL-compatible API.
*//*--------------------------------------------------------------------*/
#include "tcuDefs.hpp"
#include "tcuVector.hpp"
namespace sglr
{
class Shader;
class Context;
class ContextWrapper
{
public:
ContextWrapper(void);
~ContextWrapper(void);
void setContext(Context *context);
Context *getCurrentContext(void) const;
int getWidth(void) const;
int getHeight(void) const;
// GL-compatible API.
void glActiveTexture(uint32_t texture);
void glAttachShader(uint32_t program, uint32_t shader);
void glBindAttribLocation(uint32_t program, uint32_t index, const char *name);
void glBindBuffer(uint32_t target, uint32_t buffer);
void glBindFramebuffer(uint32_t target, uint32_t framebuffer);
void glBindRenderbuffer(uint32_t target, uint32_t renderbuffer);
void glBindTexture(uint32_t target, uint32_t texture);
void glBlendColor(float red, float green, float blue, float alpha);
void glBlendEquation(uint32_t mode);
void glBlendEquationSeparate(uint32_t modeRGB, uint32_t modeAlpha);
void glBlendFunc(uint32_t sfactor, uint32_t dfactor);
void glBlendFuncSeparate(uint32_t srcRGB, uint32_t dstRGB, uint32_t srcAlpha, uint32_t dstAlpha);
void glBufferData(uint32_t target, intptr_t size, const void *data, uint32_t usage);
void glBufferSubData(uint32_t target, intptr_t offset, intptr_t size, const void *data);
uint32_t glCheckFramebufferStatus(uint32_t target);
void glClear(uint32_t mask);
void glClearColor(float red, float green, float blue, float alpha);
void glClearDepthf(float depth);
void glClearStencil(int s);
void glColorMask(bool red, bool green, bool blue, bool alpha);
void glCompileShader(uint32_t shader);
void glCompressedTexImage2D(uint32_t target, int level, uint32_t internalformat, int width, int height, int border,
int imageSize, const void *data);
void glCompressedTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height,
uint32_t format, int imageSize, const void *data);
void glCopyTexImage1D(uint32_t target, int level, uint32_t internalformat, int x, int y, int width, int border);
void glCopyTexImage2D(uint32_t target, int level, uint32_t internalformat, int x, int y, int width, int height,
int border);
void glCopyTexSubImage1D(uint32_t target, int level, int xoffset, int x, int y, int width);
void glCopyTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
uint32_t glCreateProgram();
uint32_t glCreateShader(uint32_t type);
void glCullFace(uint32_t mode);
void glDeleteBuffers(int n, const uint32_t *buffers);
void glDeleteFramebuffers(int n, const uint32_t *framebuffers);
void glDeleteProgram(uint32_t program);
void glDeleteRenderbuffers(int n, const uint32_t *renderbuffers);
void glDeleteShader(uint32_t shader);
void glDeleteTextures(int n, const uint32_t *textures);
void glDepthFunc(uint32_t func);
void glDepthMask(bool flag);
void glDepthRangef(float n, float f);
void glDetachShader(uint32_t program, uint32_t shader);
void glDisable(uint32_t cap);
void glDisableVertexAttribArray(uint32_t index);
void glDrawArrays(uint32_t mode, int first, int count);
void glDrawElements(uint32_t mode, int count, uint32_t type, const void *indices);
void glEnable(uint32_t cap);
void glEnableVertexAttribArray(uint32_t index);
void glFinish();
void glFlush();
void glFramebufferRenderbuffer(uint32_t target, uint32_t attachment, uint32_t renderbuffertarget,
uint32_t renderbuffer);
void glFramebufferTexture2D(uint32_t target, uint32_t attachment, uint32_t textarget, uint32_t texture, int level);
void glFrontFace(uint32_t mode);
void glGenBuffers(int n, uint32_t *buffers);
void glGenerateMipmap(uint32_t target);
void glGenFramebuffers(int n, uint32_t *framebuffers);
void glGenRenderbuffers(int n, uint32_t *renderbuffers);
void glGenTextures(int n, uint32_t *textures);
void glGetActiveAttrib(uint32_t program, uint32_t index, int bufsize, int *length, int *size, uint32_t *type,
char *name);
void glGetActiveUniform(uint32_t program, uint32_t index, int bufsize, int *length, int *size, uint32_t *type,
char *name);
void glGetAttachedShaders(uint32_t program, int maxcount, int *count, uint32_t *shaders);
int glGetAttribLocation(uint32_t program, const char *name);
void glGetBooleanv(uint32_t pname, bool *params);
void glGetBufferParameteriv(uint32_t target, uint32_t pname, int *params);
uint32_t glGetError();
void glGetFloatv(uint32_t pname, float *params);
void glGetFramebufferAttachmentParameteriv(uint32_t target, uint32_t attachment, uint32_t pname, int *params);
void glGetIntegerv(uint32_t pname, int *params);
void glGetProgramiv(uint32_t program, uint32_t pname, int *params);
void glGetProgramInfoLog(uint32_t program, int bufsize, int *length, char *infolog);
void glGetRenderbufferParameteriv(uint32_t target, uint32_t pname, int *params);
void glGetShaderiv(uint32_t shader, uint32_t pname, int *params);
void glGetShaderInfoLog(uint32_t shader, int bufsize, int *length, char *infolog);
void glGetShaderPrecisionFormat(uint32_t shadertype, uint32_t precisiontype, int *range, int *precision);
void glGetShaderSource(uint32_t shader, int bufsize, int *length, char *source);
const uint8_t *glGetString(uint32_t name);
void glGetTexParameterfv(uint32_t target, uint32_t pname, float *params);
void glGetTexParameteriv(uint32_t target, uint32_t pname, int *params);
void glGetUniformfv(uint32_t program, int location, float *params);
void glGetUniformiv(uint32_t program, int location, int *params);
int glGetUniformLocation(uint32_t program, const char *name);
void glGetVertexAttribfv(uint32_t index, uint32_t pname, float *params);
void glGetVertexAttribiv(uint32_t index, uint32_t pname, int *params);
void glGetVertexAttribPointerv(uint32_t index, uint32_t pname, void **pointer);
void glHint(uint32_t target, uint32_t mode);
bool glIsBuffer(uint32_t buffer);
bool glIsEnabled(uint32_t cap);
bool glIsFramebuffer(uint32_t framebuffer);
bool glIsProgram(uint32_t program);
bool glIsRenderbuffer(uint32_t renderbuffer);
bool glIsShader(uint32_t shader);
bool glIsTexture(uint32_t texture);
void glLineWidth(float width);
void glLinkProgram(uint32_t program);
void glPixelStorei(uint32_t pname, int param);
void glPolygonOffset(float factor, float units);
void glReadPixels(int x, int y, int width, int height, uint32_t format, uint32_t type, void *pixels);
void glReleaseShaderCompiler();
void glRenderbufferStorage(uint32_t target, uint32_t internalformat, int width, int height);
void glSampleCoverage(float value, bool invert);
void glScissor(int x, int y, int width, int height);
void glShaderBinary(int n, const uint32_t *shaders, uint32_t binaryformat, const void *binary, int length);
void glShaderSource(uint32_t shader, int count, const char *const *string, const int *length);
void glStencilFunc(uint32_t func, int ref, uint32_t mask);
void glStencilFuncSeparate(uint32_t face, uint32_t func, int ref, uint32_t mask);
void glStencilMask(uint32_t mask);
void glStencilMaskSeparate(uint32_t face, uint32_t mask);
void glStencilOp(uint32_t fail, uint32_t zfail, uint32_t zpass);
void glStencilOpSeparate(uint32_t face, uint32_t fail, uint32_t zfail, uint32_t zpass);
void glTexImage1D(uint32_t target, int level, int internalformat, int width, int border, uint32_t format,
uint32_t type, const void *pixels);
void glTexImage2D(uint32_t target, int level, int internalformat, int width, int height, int border,
uint32_t format, uint32_t type, const void *pixels);
void glTexParameterf(uint32_t target, uint32_t pname, float param);
void glTexParameterfv(uint32_t target, uint32_t pname, const float *params);
void glTexParameteri(uint32_t target, uint32_t pname, int param);
void glTexParameteriv(uint32_t target, uint32_t pname, const int *params);
void glTexSubImage1D(uint32_t target, int level, int xoffset, int width, uint32_t format, uint32_t type,
const void *pixels);
void glTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height, uint32_t format,
uint32_t type, const void *pixels);
void glUniform1f(int location, float x);
void glUniform1fv(int location, int count, const float *v);
void glUniform1i(int location, int x);
void glUniform1iv(int location, int count, const int *v);
void glUniform2f(int location, float x, float y);
void glUniform2fv(int location, int count, const float *v);
void glUniform2i(int location, int x, int y);
void glUniform2iv(int location, int count, const int *v);
void glUniform3f(int location, float x, float y, float z);
void glUniform3fv(int location, int count, const float *v);
void glUniform3i(int location, int x, int y, int z);
void glUniform3iv(int location, int count, const int *v);
void glUniform4f(int location, float x, float y, float z, float w);
void glUniform4fv(int location, int count, const float *v);
void glUniform4i(int location, int x, int y, int z, int w);
void glUniform4iv(int location, int count, const int *v);
void glUniformMatrix2fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix3fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix4fv(int location, int count, bool transpose, const float *value);
void glUseProgram(uint32_t program);
void glValidateProgram(uint32_t program);
void glVertexAttrib1f(uint32_t indx, float x);
void glVertexAttrib1fv(uint32_t indx, const float *values);
void glVertexAttrib2f(uint32_t indx, float x, float y);
void glVertexAttrib2fv(uint32_t indx, const float *values);
void glVertexAttrib3f(uint32_t indx, float x, float y, float z);
void glVertexAttrib3fv(uint32_t indx, const float *values);
void glVertexAttrib4f(uint32_t indx, float x, float y, float z, float w);
void glVertexAttrib4fv(uint32_t indx, const float *values);
void glVertexAttribPointer(uint32_t indx, int size, uint32_t type, bool normalized, int stride, const void *ptr);
void glViewport(int x, int y, int width, int height);
void glReadBuffer(uint32_t mode);
void glDrawRangeElements(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type,
const void *indices);
void glTexImage3D(uint32_t target, int level, int internalformat, int width, int height, int depth, int border,
uint32_t format, uint32_t type, const void *pixels);
void glTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width, int height,
int depth, uint32_t format, uint32_t type, const void *pixels);
void glCopyTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width,
int height);
void glCompressedTexImage3D(uint32_t target, int level, uint32_t internalformat, int width, int height, int depth,
int border, int imageSize, const void *data);
void glCompressedTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width,
int height, int depth, uint32_t format, int imageSize, const void *data);
void glGenQueries(int n, uint32_t *ids);
void glDeleteQueries(int n, const uint32_t *ids);
bool glIsQuery(uint32_t id);
void glBeginQuery(uint32_t target, uint32_t id);
void glEndQuery(uint32_t target);
void glGetQueryiv(uint32_t target, uint32_t pname, int *params);
void glGetQueryObjectuiv(uint32_t id, uint32_t pname, uint32_t *params);
bool glUnmapBuffer(uint32_t target);
void glGetBufferPointerv(uint32_t target, uint32_t pname, void **params);
void glDrawBuffers(int n, const uint32_t *bufs);
void glUniformMatrix2x3fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix3x2fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix2x4fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix4x2fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix3x4fv(int location, int count, bool transpose, const float *value);
void glUniformMatrix4x3fv(int location, int count, bool transpose, const float *value);
void glBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
uint32_t mask, uint32_t filter);
void glRenderbufferStorageMultisample(uint32_t target, int samples, uint32_t internalformat, int width, int height);
void glFramebufferTextureLayer(uint32_t target, uint32_t attachment, uint32_t texture, int level, int layer);
void *glMapBufferRange(uint32_t target, intptr_t offset, intptr_t length, uint32_t access);
void glFlushMappedBufferRange(uint32_t target, intptr_t offset, intptr_t length);
void glBindVertexArray(uint32_t array);
void glDeleteVertexArrays(int n, const uint32_t *arrays);
void glGenVertexArrays(int n, uint32_t *arrays);
bool glIsVertexArray(uint32_t array);
void glGetIntegeri_v(uint32_t target, uint32_t index, int *data);
void glBeginTransformFeedback(uint32_t primitiveMode);
void glEndTransformFeedback();
void glBindBufferRange(uint32_t target, uint32_t index, uint32_t buffer, intptr_t offset, intptr_t size);
void glBindBufferBase(uint32_t target, uint32_t index, uint32_t buffer);
void glTransformFeedbackVaryings(uint32_t program, int count, const char *const *varyings, uint32_t bufferMode);
void glGetTransformFeedbackVarying(uint32_t program, uint32_t index, int bufSize, int *length, int *size,
uint32_t *type, char *name);
void glVertexAttribIPointer(uint32_t index, int size, uint32_t type, int stride, const void *pointer);
void glGetVertexAttribIiv(uint32_t index, uint32_t pname, int *params);
void glGetVertexAttribIuiv(uint32_t index, uint32_t pname, uint32_t *params);
void glVertexAttribI4i(uint32_t index, int x, int y, int z, int w);
void glVertexAttribI4ui(uint32_t index, uint32_t x, uint32_t y, uint32_t z, uint32_t w);
void glVertexAttribI4iv(uint32_t index, const int *v);
void glVertexAttribI4uiv(uint32_t index, const uint32_t *v);
void glGetUniformuiv(uint32_t program, int location, uint32_t *params);
int glGetFragDataLocation(uint32_t program, const char *name);
void glUniform1ui(int location, uint32_t v0);
void glUniform2ui(int location, uint32_t v0, uint32_t v1);
void glUniform3ui(int location, uint32_t v0, uint32_t v1, uint32_t v2);
void glUniform4ui(int location, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
void glUniform1uiv(int location, int count, const uint32_t *value);
void glUniform2uiv(int location, int count, const uint32_t *value);
void glUniform3uiv(int location, int count, const uint32_t *value);
void glUniform4uiv(int location, int count, const uint32_t *value);
void glClearBufferiv(uint32_t buffer, int drawbuffer, const int *value);
void glClearBufferuiv(uint32_t buffer, int drawbuffer, const uint32_t *value);
void glClearBufferfv(uint32_t buffer, int drawbuffer, const float *value);
void glClearBufferfi(uint32_t buffer, int drawbuffer, float depth, int stencil);
const uint8_t *glGetStringi(uint32_t name, uint32_t index);
void glCopyBufferSubData(uint32_t readTarget, uint32_t writeTarget, intptr_t readOffset, intptr_t writeOffset,
intptr_t size);
void glGetUniformIndices(uint32_t program, int uniformCount, const char *const *uniformNames,
uint32_t *uniformIndices);
void glGetActiveUniformsiv(uint32_t program, int uniformCount, const uint32_t *uniformIndices, uint32_t pname,
int *params);
uint32_t glGetUniformBlockIndex(uint32_t program, const char *uniformBlockName);
void glGetActiveUniformBlockiv(uint32_t program, uint32_t uniformBlockIndex, uint32_t pname, int *params);
void glGetActiveUniformBlockName(uint32_t program, uint32_t uniformBlockIndex, int bufSize, int *length,
char *uniformBlockName);
void glUniformBlockBinding(uint32_t program, uint32_t uniformBlockIndex, uint32_t uniformBlockBinding);
void glDrawArraysInstanced(uint32_t mode, int first, int count, int primcount);
void glDrawElementsInstanced(uint32_t mode, int count, uint32_t type, const void *indices, int primcount);
void *glFenceSync(uint32_t condition, uint32_t flags);
bool glIsSync(void *sync);
void glDeleteSync(void *sync);
uint32_t glClientWaitSync(void *sync, uint32_t flags, uint64_t timeout);
void glWaitSync(void *sync, uint32_t flags, uint64_t timeout);
void glGetInteger64v(uint32_t pname, int64_t *params);
void glGetSynciv(void *sync, uint32_t pname, int bufSize, int *length, int *values);
void glGetInteger64i_v(uint32_t target, uint32_t index, int64_t *data);
void glGetBufferParameteri64v(uint32_t target, uint32_t pname, int64_t *params);
void glGenSamplers(int count, uint32_t *samplers);
void glDeleteSamplers(int count, const uint32_t *samplers);
bool glIsSampler(uint32_t sampler);
void glBindSampler(uint32_t unit, uint32_t sampler);
void glSamplerParameteri(uint32_t sampler, uint32_t pname, int param);
void glSamplerParameteriv(uint32_t sampler, uint32_t pname, const int *param);
void glSamplerParameterf(uint32_t sampler, uint32_t pname, float param);
void glSamplerParameterfv(uint32_t sampler, uint32_t pname, const float *param);
void glGetSamplerParameteriv(uint32_t sampler, uint32_t pname, int *params);
void glGetSamplerParameterfv(uint32_t sampler, uint32_t pname, float *params);
void glVertexAttribDivisor(uint32_t index, uint32_t divisor);
void glBindTransformFeedback(uint32_t target, uint32_t id);
void glDeleteTransformFeedbacks(int n, const uint32_t *ids);
void glGenTransformFeedbacks(int n, uint32_t *ids);
bool glIsTransformFeedback(uint32_t id);
void glPauseTransformFeedback();
void glResumeTransformFeedback();
void glGetProgramBinary(uint32_t program, int bufSize, int *length, uint32_t *binaryFormat, void *binary);
void glProgramBinary(uint32_t program, uint32_t binaryFormat, const void *binary, int length);
void glProgramParameteri(uint32_t program, uint32_t pname, int value);
void glInvalidateFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments);
void glInvalidateSubFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments, int x, int y,
int width, int height);
void glTexStorage2D(uint32_t target, int levels, uint32_t internalformat, int width, int height);
void glTexStorage3D(uint32_t target, int levels, uint32_t internalformat, int width, int height, int depth);
void glGetInternalformativ(uint32_t target, uint32_t internalformat, uint32_t pname, int bufSize, int *params);
private:
Context *m_curCtx;
};
} // namespace sglr
#endif // _SGLRCONTEXTWRAPPER_HPP