1 #ifndef _SGLRGLCONTEXT_HPP
2 #define _SGLRGLCONTEXT_HPP
3 /*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL ES Utilities
5 * ------------------------------------------------
7 * Copyright 2014 The Android Open Source Project
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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.
23 * \brief GL Rendering Context.
24 *//*--------------------------------------------------------------------*/
26 #include "tcuDefs.hpp"
27 #include "sglrContext.hpp"
28 #include "tcuTestLog.hpp"
29 #include "tcuVector.hpp"
30 #include "gluRenderContext.hpp"
31 #include "gluShaderProgram.hpp"
46 GLCONTEXT_LOG_CALLS = (1 << 0),
47 GLCONTEXT_LOG_PROGRAMS = (1 << 1)
50 class GLContext : public Context
53 GLContext (const glu::RenderContext& context, tcu::TestLog& log, deUint32 logFlags, const tcu::IVec4& baseViewport);
54 virtual ~GLContext (void);
56 void enableLogging (deUint32 logFlags);
58 virtual int getWidth (void) const;
59 virtual int getHeight (void) const;
61 virtual void viewport (int x, int y, int width, int height);
62 virtual void activeTexture (deUint32 texture);
64 virtual void bindTexture (deUint32 target, deUint32 texture);
65 virtual void genTextures (int numTextures, deUint32* textures);
66 virtual void deleteTextures (int numTextures, const deUint32* textures);
68 virtual void bindFramebuffer (deUint32 target, deUint32 framebuffer);
69 virtual void genFramebuffers (int numFramebuffers, deUint32* framebuffers);
70 virtual void deleteFramebuffers (int numFramebuffers, const deUint32* framebuffers);
72 virtual void bindRenderbuffer (deUint32 target, deUint32 renderbuffer);
73 virtual void genRenderbuffers (int numRenderbuffers, deUint32* renderbuffers);
74 virtual void deleteRenderbuffers (int numRenderbuffers, const deUint32* renderbuffers);
76 virtual void pixelStorei (deUint32 pname, int param);
77 virtual void texImage1D (deUint32 target, int level, deUint32 internalFormat, int width, int border, deUint32 format, deUint32 type, const void* data);
78 virtual void texImage2D (deUint32 target, int level, deUint32 internalFormat, int width, int height, int border, deUint32 format, deUint32 type, const void* data);
79 virtual void texImage3D (deUint32 target, int level, deUint32 internalFormat, int width, int height, int depth, int border, deUint32 format, deUint32 type, const void* data);
80 virtual void texSubImage1D (deUint32 target, int level, int xoffset, int width, deUint32 format, deUint32 type, const void* data);
81 virtual void texSubImage2D (deUint32 target, int level, int xoffset, int yoffset, int width, int height, deUint32 format, deUint32 type, const void* data);
82 virtual void texSubImage3D (deUint32 target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, deUint32 format, deUint32 type, const void* data);
83 virtual void copyTexImage1D (deUint32 target, int level, deUint32 internalFormat, int x, int y, int width, int border);
84 virtual void copyTexImage2D (deUint32 target, int level, deUint32 internalFormat, int x, int y, int width, int height, int border);
85 virtual void copyTexSubImage1D (deUint32 target, int level, int xoffset, int x, int y, int width);
86 virtual void copyTexSubImage2D (deUint32 target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
87 virtual void copyTexSubImage3D (deUint32 target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height);
89 virtual void texStorage2D (deUint32 target, int levels, deUint32 internalFormat, int width, int height);
90 virtual void texStorage3D (deUint32 target, int levels, deUint32 internalFormat, int width, int height, int depth);
92 virtual void texParameteri (deUint32 target, deUint32 pname, int value);
94 virtual void framebufferTexture2D (deUint32 target, deUint32 attachment, deUint32 textarget, deUint32 texture, int level);
95 virtual void framebufferTextureLayer (deUint32 target, deUint32 attachment, deUint32 texture, int level, int layer);
96 virtual void framebufferRenderbuffer (deUint32 target, deUint32 attachment, deUint32 renderbuffertarget, deUint32 renderbuffer);
97 virtual deUint32 checkFramebufferStatus (deUint32 target);
99 virtual void getFramebufferAttachmentParameteriv (deUint32 target, deUint32 attachment, deUint32 pname, int* params);
101 virtual void renderbufferStorage (deUint32 target, deUint32 internalformat, int width, int height);
102 virtual void renderbufferStorageMultisample (deUint32 target, int samples, deUint32 internalFormat, int width, int height);
104 virtual void bindBuffer (deUint32 target, deUint32 buffer);
105 virtual void genBuffers (int numBuffers, deUint32* buffers);
106 virtual void deleteBuffers (int numBuffers, const deUint32* buffers);
108 virtual void bufferData (deUint32 target, deIntptr size, const void* data, deUint32 usage);
109 virtual void bufferSubData (deUint32 target, deIntptr offset, deIntptr size, const void* data);
111 virtual void clearColor (float red, float green, float blue, float alpha);
112 virtual void clearDepthf (float depth);
113 virtual void clearStencil (int stencil);
115 virtual void clear (deUint32 buffers);
116 virtual void clearBufferiv (deUint32 buffer, int drawbuffer, const int* value);
117 virtual void clearBufferfv (deUint32 buffer, int drawbuffer, const float* value);
118 virtual void clearBufferuiv (deUint32 buffer, int drawbuffer, const deUint32* value);
119 virtual void clearBufferfi (deUint32 buffer, int drawbuffer, float depth, int stencil);
120 virtual void scissor (int x, int y, int width, int height);
122 virtual void enable (deUint32 cap);
123 virtual void disable (deUint32 cap);
125 virtual void stencilFunc (deUint32 func, int ref, deUint32 mask);
126 virtual void stencilOp (deUint32 sfail, deUint32 dpfail, deUint32 dppass);
127 virtual void stencilFuncSeparate (deUint32 face, deUint32 func, int ref, deUint32 mask);
128 virtual void stencilOpSeparate (deUint32 face, deUint32 sfail, deUint32 dpfail, deUint32 dppass);
130 virtual void depthFunc (deUint32 func);
131 virtual void depthRangef (float n, float f);
132 virtual void depthRange (double n, double f);
134 virtual void polygonOffset (float factor, float units);
135 virtual void provokingVertex (deUint32 convention);
136 virtual void primitiveRestartIndex (deUint32 index);
138 virtual void blendEquation (deUint32 mode);
139 virtual void blendEquationSeparate (deUint32 modeRGB, deUint32 modeAlpha);
140 virtual void blendFunc (deUint32 src, deUint32 dst);
141 virtual void blendFuncSeparate (deUint32 srcRGB, deUint32 dstRGB, deUint32 srcAlpha, deUint32 dstAlpha);
142 virtual void blendColor (float red, float green, float blue, float alpha);
144 virtual void colorMask (deBool r, deBool g, deBool b, deBool a);
145 virtual void depthMask (deBool mask);
146 virtual void stencilMask (deUint32 mask);
147 virtual void stencilMaskSeparate (deUint32 face, deUint32 mask);
149 virtual void blitFramebuffer (int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, deUint32 mask, deUint32 filter);
151 virtual void invalidateSubFramebuffer(deUint32 target, int numAttachments, const deUint32* attachments, int x, int y, int width, int height);
152 virtual void invalidateFramebuffer (deUint32 target, int numAttachments, const deUint32* attachments);
154 virtual void bindVertexArray (deUint32 array);
155 virtual void genVertexArrays (int numArrays, deUint32* vertexArrays);
156 virtual void deleteVertexArrays (int numArrays, const deUint32* vertexArrays);
158 virtual void vertexAttribPointer (deUint32 index, int size, deUint32 type, deBool normalized, int stride, const void *pointer);
159 virtual void vertexAttribIPointer (deUint32 index, int size, deUint32 type, int stride, const void *pointer);
160 virtual void enableVertexAttribArray (deUint32 index);
161 virtual void disableVertexAttribArray(deUint32 index);
162 virtual void vertexAttribDivisor (deUint32 index, deUint32 divisor);
164 virtual void vertexAttrib1f (deUint32 index, float);
165 virtual void vertexAttrib2f (deUint32 index, float, float);
166 virtual void vertexAttrib3f (deUint32 index, float, float, float);
167 virtual void vertexAttrib4f (deUint32 index, float, float, float, float);
168 virtual void vertexAttribI4i (deUint32 index, deInt32, deInt32, deInt32, deInt32);
169 virtual void vertexAttribI4ui (deUint32 index, deUint32, deUint32, deUint32, deUint32);
171 virtual deInt32 getAttribLocation (deUint32 program, const char *name);
173 virtual void uniform1f (deInt32 location, float);
174 virtual void uniform1i (deInt32 location, deInt32);
175 virtual void uniform1fv (deInt32 index, deInt32 count, const float*);
176 virtual void uniform2fv (deInt32 index, deInt32 count, const float*);
177 virtual void uniform3fv (deInt32 index, deInt32 count, const float*);
178 virtual void uniform4fv (deInt32 index, deInt32 count, const float*);
179 virtual void uniform1iv (deInt32 index, deInt32 count, const deInt32*);
180 virtual void uniform2iv (deInt32 index, deInt32 count, const deInt32*);
181 virtual void uniform3iv (deInt32 index, deInt32 count, const deInt32*);
182 virtual void uniform4iv (deInt32 index, deInt32 count, const deInt32*);
183 virtual void uniformMatrix3fv (deInt32 location, deInt32 count, deBool transpose, const float *value);
184 virtual void uniformMatrix4fv (deInt32 location, deInt32 count, deBool transpose, const float *value);
185 virtual deInt32 getUniformLocation (deUint32 program, const char *name);
187 virtual void lineWidth (float);
189 virtual void drawArrays (deUint32 mode, int first, int count);
190 virtual void drawArraysInstanced (deUint32 mode, int first, int count, int instanceCount);
191 virtual void drawElements (deUint32 mode, int count, deUint32 type, const void *indices);
192 virtual void drawElementsInstanced (deUint32 mode, int count, deUint32 type, const void *indices, int instanceCount);
193 virtual void drawElementsBaseVertex (deUint32 mode, int count, deUint32 type, const void *indices, int baseVertex);
194 virtual void drawElementsInstancedBaseVertex (deUint32 mode, int count, deUint32 type, const void *indices, int instanceCount, int baseVertex);
195 virtual void drawRangeElements (deUint32 mode, deUint32 start, deUint32 end, int count, deUint32 type, const void *indices);
196 virtual void drawRangeElementsBaseVertex (deUint32 mode, deUint32 start, deUint32 end, int count, deUint32 type, const void *indices, int baseVertex);
197 virtual void drawArraysIndirect (deUint32 mode, const void *indirect);
198 virtual void drawElementsIndirect (deUint32 mode, deUint32 type, const void *indirect);
200 virtual void multiDrawArrays (deUint32 mode, const int* first, const int* count, int primCount);
201 virtual void multiDrawElements (deUint32 mode, const int* count, deUint32 type, const void** indices, int primCount);
202 virtual void multiDrawElementsBaseVertex (deUint32 mode, const int* count, deUint32 type, const void** indices, int primCount, const int* baseVertex);
204 virtual deUint32 createProgram (ShaderProgram*);
205 virtual void deleteProgram (deUint32 program);
206 virtual void useProgram (deUint32 program);
208 virtual void readPixels (int x, int y, int width, int height, deUint32 format, deUint32 type, void* data);
209 virtual deUint32 getError (void);
210 virtual void finish (void);
212 virtual void getIntegerv (deUint32 pname, int* params);
213 virtual const char* getString (deUint32 pname);
215 // Expose helpers from Context.
216 using Context::readPixels;
217 using Context::texImage2D;
218 using Context::texSubImage2D;
221 GLContext (const GLContext& other);
222 GLContext& operator= (const GLContext& other);
224 tcu::IVec2 getReadOffset (void) const;
225 tcu::IVec2 getDrawOffset (void) const;
227 const glu::RenderContext& m_context;
231 tcu::IVec4 m_baseViewport;
232 tcu::IVec4 m_curViewport;
233 tcu::IVec4 m_curScissor;
234 deUint32 m_readFramebufferBinding;
235 deUint32 m_drawFramebufferBinding;
237 glu::CallLogWrapper* m_wrapper;
240 std::set<deUint32> m_allocatedTextures;
241 std::set<deUint32> m_allocatedFbos;
242 std::set<deUint32> m_allocatedRbos;
243 std::set<deUint32> m_allocatedBuffers;
244 std::set<deUint32> m_allocatedVaos;
245 std::vector<glu::ShaderProgram*> m_programs;
246 } DE_WARN_UNUSED_TYPE;
250 #endif // _SGLRGLCONTEXT_HPP