blob: ca6de6c9b12a27634d51eb7ed13e5a43b8fb5f59 [file] [log] [blame] [edit]
#ifndef _SGLRCONTEXT_HPP
#define _SGLRCONTEXT_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 Simplified GLES reference context.
*//*--------------------------------------------------------------------*/
#include "tcuDefs.hpp"
#include "tcuSurface.hpp"
#include "gluRenderContext.hpp"
#include "sglrShaderProgram.hpp"
/*--------------------------------------------------------------------*//*!
* \brief Reference OpenGL API implementation
*//*--------------------------------------------------------------------*/
namespace sglr
{
// Abstract drawing context with GL-style API
class Context
{
public:
Context(glu::ContextType type) : m_type(type)
{
}
virtual ~Context(void)
{
}
virtual int getWidth(void) const = 0;
virtual int getHeight(void) const = 0;
virtual void activeTexture(uint32_t texture) = 0;
virtual void viewport(int x, int y, int width, int height) = 0;
virtual void bindTexture(uint32_t target, uint32_t texture) = 0;
virtual void genTextures(int numTextures, uint32_t *textures) = 0;
virtual void deleteTextures(int numTextures, const uint32_t *textures) = 0;
virtual void bindFramebuffer(uint32_t target, uint32_t framebuffer) = 0;
virtual void genFramebuffers(int numFramebuffers, uint32_t *framebuffers) = 0;
virtual void deleteFramebuffers(int numFramebuffers, const uint32_t *framebuffers) = 0;
virtual void bindRenderbuffer(uint32_t target, uint32_t renderbuffer) = 0;
virtual void genRenderbuffers(int numRenderbuffers, uint32_t *renderbuffers) = 0;
virtual void deleteRenderbuffers(int numRenderbuffers, const uint32_t *renderbuffers) = 0;
virtual void pixelStorei(uint32_t pname, int param) = 0;
virtual void texImage1D(uint32_t target, int level, uint32_t internalFormat, int width, int border, uint32_t format,
uint32_t type, const void *data) = 0;
virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, int width, int height, int border,
uint32_t format, uint32_t type, const void *data) = 0;
virtual void texImage3D(uint32_t target, int level, uint32_t internalFormat, int width, int height, int depth,
int border, uint32_t format, uint32_t type, const void *data) = 0;
virtual void texSubImage1D(uint32_t target, int level, int xoffset, int width, uint32_t format, uint32_t type,
const void *data) = 0;
virtual void texSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height,
uint32_t format, uint32_t type, const void *data) = 0;
virtual void texSubImage3D(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 *data) = 0;
virtual void copyTexImage1D(uint32_t target, int level, uint32_t internalFormat, int x, int y, int width,
int border) = 0;
virtual void copyTexImage2D(uint32_t target, int level, uint32_t internalFormat, int x, int y, int width,
int height, int border) = 0;
virtual void copyTexSubImage1D(uint32_t target, int level, int xoffset, int x, int y, int width) = 0;
virtual void copyTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int x, int y, int width,
int height) = 0;
virtual void copyTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int x, int y,
int width, int height) = 0;
virtual void texStorage2D(uint32_t target, int levels, uint32_t internalFormat, int width, int height) = 0;
virtual void texStorage3D(uint32_t target, int levels, uint32_t internalFormat, int width, int height,
int depth) = 0;
virtual void texParameteri(uint32_t target, uint32_t pname, int value) = 0;
virtual void framebufferTexture2D(uint32_t target, uint32_t attachment, uint32_t textarget, uint32_t texture,
int level) = 0;
virtual void framebufferTextureLayer(uint32_t target, uint32_t attachment, uint32_t texture, int level,
int layer) = 0;
virtual void framebufferRenderbuffer(uint32_t target, uint32_t attachment, uint32_t renderbuffertarget,
uint32_t renderbuffer) = 0;
virtual uint32_t checkFramebufferStatus(uint32_t target) = 0;
virtual void getFramebufferAttachmentParameteriv(uint32_t target, uint32_t attachment, uint32_t pname,
int *params) = 0;
virtual void renderbufferStorage(uint32_t target, uint32_t internalformat, int width, int height) = 0;
virtual void renderbufferStorageMultisample(uint32_t target, int samples, uint32_t internalFormat, int width,
int height) = 0;
virtual void bindBuffer(uint32_t target, uint32_t buffer) = 0;
virtual void genBuffers(int numBuffers, uint32_t *buffers) = 0;
virtual void deleteBuffers(int numBuffers, const uint32_t *buffers) = 0;
virtual void bufferData(uint32_t target, intptr_t size, const void *data, uint32_t usage) = 0;
virtual void bufferSubData(uint32_t target, intptr_t offset, intptr_t size, const void *data) = 0;
virtual void clearColor(float red, float green, float blue, float alpha) = 0;
virtual void clearDepthf(float depth) = 0;
virtual void clearStencil(int stencil) = 0;
virtual void clear(uint32_t buffers) = 0;
virtual void clearBufferiv(uint32_t buffer, int drawbuffer, const int *value) = 0;
virtual void clearBufferfv(uint32_t buffer, int drawbuffer, const float *value) = 0;
virtual void clearBufferuiv(uint32_t buffer, int drawbuffer, const uint32_t *value) = 0;
virtual void clearBufferfi(uint32_t buffer, int drawbuffer, float depth, int stencil) = 0;
virtual void scissor(int x, int y, int width, int height) = 0;
virtual void enable(uint32_t cap) = 0;
virtual void disable(uint32_t cap) = 0;
virtual void stencilFunc(uint32_t func, int ref, uint32_t mask) = 0;
virtual void stencilOp(uint32_t sfail, uint32_t dpfail, uint32_t dppass) = 0;
virtual void stencilFuncSeparate(uint32_t face, uint32_t func, int ref, uint32_t mask) = 0;
virtual void stencilOpSeparate(uint32_t face, uint32_t sfail, uint32_t dpfail, uint32_t dppass) = 0;
virtual void depthFunc(uint32_t func) = 0;
virtual void depthRangef(float n, float f) = 0;
virtual void depthRange(double n, double f) = 0;
virtual void polygonOffset(float factor, float units) = 0;
virtual void provokingVertex(uint32_t convention) = 0;
virtual void primitiveRestartIndex(uint32_t index) = 0;
virtual void blendEquation(uint32_t mode) = 0;
virtual void blendEquationSeparate(uint32_t modeRGB, uint32_t modeAlpha) = 0;
virtual void blendFunc(uint32_t src, uint32_t dst) = 0;
virtual void blendFuncSeparate(uint32_t srcRGB, uint32_t dstRGB, uint32_t srcAlpha, uint32_t dstAlpha) = 0;
virtual void blendColor(float red, float green, float blue, float alpha) = 0;
virtual void colorMask(bool r, bool g, bool b, bool a) = 0;
virtual void depthMask(bool mask) = 0;
virtual void stencilMask(uint32_t mask) = 0;
virtual void stencilMaskSeparate(uint32_t face, uint32_t mask) = 0;
virtual void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1,
uint32_t mask, uint32_t filter) = 0;
virtual void invalidateSubFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments, int x,
int y, int width, int height) = 0;
virtual void invalidateFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments) = 0;
virtual void bindVertexArray(uint32_t array) = 0;
virtual void genVertexArrays(int numArrays, uint32_t *vertexArrays) = 0;
virtual void deleteVertexArrays(int numArrays, const uint32_t *vertexArrays) = 0;
virtual void vertexAttribPointer(uint32_t index, int size, uint32_t type, bool normalized, int stride,
const void *pointer) = 0;
virtual void vertexAttribIPointer(uint32_t index, int size, uint32_t type, int stride, const void *pointer) = 0;
virtual void enableVertexAttribArray(uint32_t index) = 0;
virtual void disableVertexAttribArray(uint32_t index) = 0;
virtual void vertexAttribDivisor(uint32_t index, uint32_t divisor) = 0;
virtual void vertexAttrib1f(uint32_t index, float) = 0;
virtual void vertexAttrib2f(uint32_t index, float, float) = 0;
virtual void vertexAttrib3f(uint32_t index, float, float, float) = 0;
virtual void vertexAttrib4f(uint32_t index, float, float, float, float) = 0;
virtual void vertexAttribI4i(uint32_t index, int32_t, int32_t, int32_t, int32_t) = 0;
virtual void vertexAttribI4ui(uint32_t index, uint32_t, uint32_t, uint32_t, uint32_t) = 0;
virtual int32_t getAttribLocation(uint32_t program, const char *name) = 0;
virtual void uniform1f(int32_t index, float) = 0;
virtual void uniform1i(int32_t index, int32_t) = 0;
virtual void uniform1fv(int32_t index, int32_t count, const float *) = 0;
virtual void uniform2fv(int32_t index, int32_t count, const float *) = 0;
virtual void uniform3fv(int32_t index, int32_t count, const float *) = 0;
virtual void uniform4fv(int32_t index, int32_t count, const float *) = 0;
virtual void uniform1iv(int32_t index, int32_t count, const int32_t *) = 0;
virtual void uniform2iv(int32_t index, int32_t count, const int32_t *) = 0;
virtual void uniform3iv(int32_t index, int32_t count, const int32_t *) = 0;
virtual void uniform4iv(int32_t index, int32_t count, const int32_t *) = 0;
virtual void uniformMatrix3fv(int32_t location, int32_t count, bool transpose, const float *value) = 0;
virtual void uniformMatrix4fv(int32_t location, int32_t count, bool transpose, const float *value) = 0;
virtual int32_t getUniformLocation(uint32_t program, const char *name) = 0;
virtual void lineWidth(float) = 0;
virtual void drawArrays(uint32_t mode, int first, int count) = 0;
virtual void drawArraysInstanced(uint32_t mode, int first, int count, int instanceCount) = 0;
virtual void drawElements(uint32_t mode, int count, uint32_t type, const void *indices) = 0;
virtual void drawElementsInstanced(uint32_t mode, int count, uint32_t type, const void *indices,
int instanceCount) = 0;
virtual void drawElementsBaseVertex(uint32_t mode, int count, uint32_t type, const void *indices,
int baseVertex) = 0;
virtual void drawElementsInstancedBaseVertex(uint32_t mode, int count, uint32_t type, const void *indices,
int instanceCount, int baseVertex) = 0;
virtual void drawRangeElements(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type,
const void *indices) = 0;
virtual void drawRangeElementsBaseVertex(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type,
const void *indices, int baseVertex) = 0;
virtual void drawArraysIndirect(uint32_t mode, const void *indirect) = 0;
virtual void drawElementsIndirect(uint32_t mode, uint32_t type, const void *indirect) = 0;
virtual void multiDrawArrays(uint32_t mode, const int *first, const int *count, int primCount) = 0;
virtual void multiDrawElements(uint32_t mode, const int *count, uint32_t type, const void **indices,
int primCount) = 0;
virtual void multiDrawElementsBaseVertex(uint32_t mode, const int *count, uint32_t type, const void **indices,
int primCount, const int *baseVertex) = 0;
virtual uint32_t createProgram(ShaderProgram *program) = 0;
virtual void useProgram(uint32_t program) = 0;
virtual void deleteProgram(uint32_t program) = 0;
virtual void readPixels(int x, int y, int width, int height, uint32_t format, uint32_t type, void *data) = 0;
virtual uint32_t getError(void) = 0;
virtual void finish(void) = 0;
virtual void getIntegerv(uint32_t pname, int *params) = 0;
virtual const char *getString(uint32_t pname) = 0;
// Helpers implemented by Context.
virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, const tcu::Surface &src);
virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, int width, int height);
virtual void texSubImage2D(uint32_t target, int level, int xoffset, int yoffset, const tcu::Surface &src);
virtual void readPixels(tcu::Surface &dst, int x, int y, int width, int height);
glu::ContextType getType(void)
{
return m_type;
}
private:
const glu::ContextType m_type;
} DE_WARN_UNUSED_TYPE;
} // namespace sglr
#endif // _SGLRCONTEXT_HPP