1 #ifndef _SGLRCONTEXT_HPP 2 #define _SGLRCONTEXT_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 Simplified GLES reference context. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 #include "tcuSurface.hpp" 28 #include "gluRenderContext.hpp" 29 #include "sglrShaderProgram.hpp" 30 31 /*--------------------------------------------------------------------*//*! 32 * \brief Reference OpenGL API implementation 33 *//*--------------------------------------------------------------------*/ 34 namespace sglr 35 { 36 37 // Abstract drawing context with GL-style API 38 39 class Context 40 { 41 public: Context(glu::ContextType type)42 Context(glu::ContextType type) : m_type(type) 43 { 44 } ~Context(void)45 virtual ~Context(void) 46 { 47 } 48 49 virtual int getWidth(void) const = DE_NULL; 50 virtual int getHeight(void) const = DE_NULL; 51 52 virtual void activeTexture(uint32_t texture) = DE_NULL; 53 virtual void viewport(int x, int y, int width, int height) = DE_NULL; 54 55 virtual void bindTexture(uint32_t target, uint32_t texture) = DE_NULL; 56 virtual void genTextures(int numTextures, uint32_t *textures) = DE_NULL; 57 virtual void deleteTextures(int numTextures, const uint32_t *textures) = DE_NULL; 58 59 virtual void bindFramebuffer(uint32_t target, uint32_t framebuffer) = DE_NULL; 60 virtual void genFramebuffers(int numFramebuffers, uint32_t *framebuffers) = DE_NULL; 61 virtual void deleteFramebuffers(int numFramebuffers, const uint32_t *framebuffers) = DE_NULL; 62 63 virtual void bindRenderbuffer(uint32_t target, uint32_t renderbuffer) = DE_NULL; 64 virtual void genRenderbuffers(int numRenderbuffers, uint32_t *renderbuffers) = DE_NULL; 65 virtual void deleteRenderbuffers(int numRenderbuffers, const uint32_t *renderbuffers) = DE_NULL; 66 67 virtual void pixelStorei(uint32_t pname, int param) = DE_NULL; 68 virtual void texImage1D(uint32_t target, int level, uint32_t internalFormat, int width, int border, uint32_t format, 69 uint32_t type, const void *data) = DE_NULL; 70 virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, int width, int height, int border, 71 uint32_t format, uint32_t type, const void *data) = DE_NULL; 72 virtual void texImage3D(uint32_t target, int level, uint32_t internalFormat, int width, int height, int depth, 73 int border, uint32_t format, uint32_t type, const void *data) = DE_NULL; 74 virtual void texSubImage1D(uint32_t target, int level, int xoffset, int width, uint32_t format, uint32_t type, 75 const void *data) = DE_NULL; 76 virtual void texSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int width, int height, 77 uint32_t format, uint32_t type, const void *data) = DE_NULL; 78 virtual void texSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int width, int height, 79 int depth, uint32_t format, uint32_t type, const void *data) = DE_NULL; 80 virtual void copyTexImage1D(uint32_t target, int level, uint32_t internalFormat, int x, int y, int width, 81 int border) = DE_NULL; 82 virtual void copyTexImage2D(uint32_t target, int level, uint32_t internalFormat, int x, int y, int width, 83 int height, int border) = DE_NULL; 84 virtual void copyTexSubImage1D(uint32_t target, int level, int xoffset, int x, int y, int width) = DE_NULL; 85 virtual void copyTexSubImage2D(uint32_t target, int level, int xoffset, int yoffset, int x, int y, int width, 86 int height) = DE_NULL; 87 virtual void copyTexSubImage3D(uint32_t target, int level, int xoffset, int yoffset, int zoffset, int x, int y, 88 int width, int height) = DE_NULL; 89 90 virtual void texStorage2D(uint32_t target, int levels, uint32_t internalFormat, int width, int height) = DE_NULL; 91 virtual void texStorage3D(uint32_t target, int levels, uint32_t internalFormat, int width, int height, 92 int depth) = DE_NULL; 93 94 virtual void texParameteri(uint32_t target, uint32_t pname, int value) = DE_NULL; 95 96 virtual void framebufferTexture2D(uint32_t target, uint32_t attachment, uint32_t textarget, uint32_t texture, 97 int level) = DE_NULL; 98 virtual void framebufferTextureLayer(uint32_t target, uint32_t attachment, uint32_t texture, int level, 99 int layer) = DE_NULL; 100 virtual void framebufferRenderbuffer(uint32_t target, uint32_t attachment, uint32_t renderbuffertarget, 101 uint32_t renderbuffer) = DE_NULL; 102 virtual uint32_t checkFramebufferStatus(uint32_t target) = DE_NULL; 103 104 virtual void getFramebufferAttachmentParameteriv(uint32_t target, uint32_t attachment, uint32_t pname, 105 int *params) = DE_NULL; 106 107 virtual void renderbufferStorage(uint32_t target, uint32_t internalformat, int width, int height) = DE_NULL; 108 virtual void renderbufferStorageMultisample(uint32_t target, int samples, uint32_t internalFormat, int width, 109 int height) = DE_NULL; 110 111 virtual void bindBuffer(uint32_t target, uint32_t buffer) = DE_NULL; 112 virtual void genBuffers(int numBuffers, uint32_t *buffers) = DE_NULL; 113 virtual void deleteBuffers(int numBuffers, const uint32_t *buffers) = DE_NULL; 114 115 virtual void bufferData(uint32_t target, intptr_t size, const void *data, uint32_t usage) = DE_NULL; 116 virtual void bufferSubData(uint32_t target, intptr_t offset, intptr_t size, const void *data) = DE_NULL; 117 118 virtual void clearColor(float red, float green, float blue, float alpha) = DE_NULL; 119 virtual void clearDepthf(float depth) = DE_NULL; 120 virtual void clearStencil(int stencil) = DE_NULL; 121 122 virtual void clear(uint32_t buffers) = DE_NULL; 123 virtual void clearBufferiv(uint32_t buffer, int drawbuffer, const int *value) = DE_NULL; 124 virtual void clearBufferfv(uint32_t buffer, int drawbuffer, const float *value) = DE_NULL; 125 virtual void clearBufferuiv(uint32_t buffer, int drawbuffer, const uint32_t *value) = DE_NULL; 126 virtual void clearBufferfi(uint32_t buffer, int drawbuffer, float depth, int stencil) = DE_NULL; 127 virtual void scissor(int x, int y, int width, int height) = DE_NULL; 128 129 virtual void enable(uint32_t cap) = DE_NULL; 130 virtual void disable(uint32_t cap) = DE_NULL; 131 132 virtual void stencilFunc(uint32_t func, int ref, uint32_t mask) = DE_NULL; 133 virtual void stencilOp(uint32_t sfail, uint32_t dpfail, uint32_t dppass) = DE_NULL; 134 virtual void stencilFuncSeparate(uint32_t face, uint32_t func, int ref, uint32_t mask) = DE_NULL; 135 virtual void stencilOpSeparate(uint32_t face, uint32_t sfail, uint32_t dpfail, uint32_t dppass) = DE_NULL; 136 137 virtual void depthFunc(uint32_t func) = DE_NULL; 138 virtual void depthRangef(float n, float f) = DE_NULL; 139 virtual void depthRange(double n, double f) = DE_NULL; 140 141 virtual void polygonOffset(float factor, float units) = DE_NULL; 142 virtual void provokingVertex(uint32_t convention) = DE_NULL; 143 virtual void primitiveRestartIndex(uint32_t index) = DE_NULL; 144 145 virtual void blendEquation(uint32_t mode) = DE_NULL; 146 virtual void blendEquationSeparate(uint32_t modeRGB, uint32_t modeAlpha) = DE_NULL; 147 virtual void blendFunc(uint32_t src, uint32_t dst) = DE_NULL; 148 virtual void blendFuncSeparate(uint32_t srcRGB, uint32_t dstRGB, uint32_t srcAlpha, uint32_t dstAlpha) = DE_NULL; 149 virtual void blendColor(float red, float green, float blue, float alpha) = DE_NULL; 150 151 virtual void colorMask(bool r, bool g, bool b, bool a) = DE_NULL; 152 virtual void depthMask(bool mask) = DE_NULL; 153 virtual void stencilMask(uint32_t mask) = DE_NULL; 154 virtual void stencilMaskSeparate(uint32_t face, uint32_t mask) = DE_NULL; 155 156 virtual void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, 157 uint32_t mask, uint32_t filter) = DE_NULL; 158 159 virtual void invalidateSubFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments, int x, 160 int y, int width, int height) = DE_NULL; 161 virtual void invalidateFramebuffer(uint32_t target, int numAttachments, const uint32_t *attachments) = DE_NULL; 162 163 virtual void bindVertexArray(uint32_t array) = DE_NULL; 164 virtual void genVertexArrays(int numArrays, uint32_t *vertexArrays) = DE_NULL; 165 virtual void deleteVertexArrays(int numArrays, const uint32_t *vertexArrays) = DE_NULL; 166 167 virtual void vertexAttribPointer(uint32_t index, int size, uint32_t type, bool normalized, int stride, 168 const void *pointer) = DE_NULL; 169 virtual void vertexAttribIPointer(uint32_t index, int size, uint32_t type, int stride, 170 const void *pointer) = DE_NULL; 171 virtual void enableVertexAttribArray(uint32_t index) = DE_NULL; 172 virtual void disableVertexAttribArray(uint32_t index) = DE_NULL; 173 virtual void vertexAttribDivisor(uint32_t index, uint32_t divisor) = DE_NULL; 174 175 virtual void vertexAttrib1f(uint32_t index, float) = DE_NULL; 176 virtual void vertexAttrib2f(uint32_t index, float, float) = DE_NULL; 177 virtual void vertexAttrib3f(uint32_t index, float, float, float) = DE_NULL; 178 virtual void vertexAttrib4f(uint32_t index, float, float, float, float) = DE_NULL; 179 virtual void vertexAttribI4i(uint32_t index, int32_t, int32_t, int32_t, int32_t) = DE_NULL; 180 virtual void vertexAttribI4ui(uint32_t index, uint32_t, uint32_t, uint32_t, uint32_t) = DE_NULL; 181 182 virtual int32_t getAttribLocation(uint32_t program, const char *name) = DE_NULL; 183 184 virtual void uniform1f(int32_t index, float) = DE_NULL; 185 virtual void uniform1i(int32_t index, int32_t) = DE_NULL; 186 virtual void uniform1fv(int32_t index, int32_t count, const float *) = DE_NULL; 187 virtual void uniform2fv(int32_t index, int32_t count, const float *) = DE_NULL; 188 virtual void uniform3fv(int32_t index, int32_t count, const float *) = DE_NULL; 189 virtual void uniform4fv(int32_t index, int32_t count, const float *) = DE_NULL; 190 virtual void uniform1iv(int32_t index, int32_t count, const int32_t *) = DE_NULL; 191 virtual void uniform2iv(int32_t index, int32_t count, const int32_t *) = DE_NULL; 192 virtual void uniform3iv(int32_t index, int32_t count, const int32_t *) = DE_NULL; 193 virtual void uniform4iv(int32_t index, int32_t count, const int32_t *) = DE_NULL; 194 virtual void uniformMatrix3fv(int32_t location, int32_t count, bool transpose, const float *value) = DE_NULL; 195 virtual void uniformMatrix4fv(int32_t location, int32_t count, bool transpose, const float *value) = DE_NULL; 196 virtual int32_t getUniformLocation(uint32_t program, const char *name) = DE_NULL; 197 198 virtual void lineWidth(float) = DE_NULL; 199 200 virtual void drawArrays(uint32_t mode, int first, int count) = DE_NULL; 201 virtual void drawArraysInstanced(uint32_t mode, int first, int count, int instanceCount) = DE_NULL; 202 virtual void drawElements(uint32_t mode, int count, uint32_t type, const void *indices) = DE_NULL; 203 virtual void drawElementsInstanced(uint32_t mode, int count, uint32_t type, const void *indices, 204 int instanceCount) = DE_NULL; 205 virtual void drawElementsBaseVertex(uint32_t mode, int count, uint32_t type, const void *indices, 206 int baseVertex) = DE_NULL; 207 virtual void drawElementsInstancedBaseVertex(uint32_t mode, int count, uint32_t type, const void *indices, 208 int instanceCount, int baseVertex) = DE_NULL; 209 virtual void drawRangeElements(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type, 210 const void *indices) = DE_NULL; 211 virtual void drawRangeElementsBaseVertex(uint32_t mode, uint32_t start, uint32_t end, int count, uint32_t type, 212 const void *indices, int baseVertex) = DE_NULL; 213 virtual void drawArraysIndirect(uint32_t mode, const void *indirect) = DE_NULL; 214 virtual void drawElementsIndirect(uint32_t mode, uint32_t type, const void *indirect) = DE_NULL; 215 216 virtual void multiDrawArrays(uint32_t mode, const int *first, const int *count, int primCount) = DE_NULL; 217 virtual void multiDrawElements(uint32_t mode, const int *count, uint32_t type, const void **indices, 218 int primCount) = DE_NULL; 219 virtual void multiDrawElementsBaseVertex(uint32_t mode, const int *count, uint32_t type, const void **indices, 220 int primCount, const int *baseVertex) = DE_NULL; 221 222 virtual uint32_t createProgram(ShaderProgram *program) = DE_NULL; 223 virtual void useProgram(uint32_t program) = DE_NULL; 224 virtual void deleteProgram(uint32_t program) = DE_NULL; 225 226 virtual void readPixels(int x, int y, int width, int height, uint32_t format, uint32_t type, void *data) = DE_NULL; 227 virtual uint32_t getError(void) = DE_NULL; 228 virtual void finish(void) = DE_NULL; 229 230 virtual void getIntegerv(uint32_t pname, int *params) = DE_NULL; 231 virtual const char *getString(uint32_t pname) = DE_NULL; 232 233 // Helpers implemented by Context. 234 virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, const tcu::Surface &src); 235 virtual void texImage2D(uint32_t target, int level, uint32_t internalFormat, int width, int height); 236 virtual void texSubImage2D(uint32_t target, int level, int xoffset, int yoffset, const tcu::Surface &src); 237 virtual void readPixels(tcu::Surface &dst, int x, int y, int width, int height); 238 getType(void)239 glu::ContextType getType(void) 240 { 241 return m_type; 242 } 243 244 private: 245 const glu::ContextType m_type; 246 } DE_WARN_UNUSED_TYPE; 247 248 } // namespace sglr 249 250 #endif // _SGLRCONTEXT_HPP 251