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