• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // queryutils.h: Utilities for querying values from GL objects
8 
9 #ifndef LIBANGLE_QUERYUTILS_H_
10 #define LIBANGLE_QUERYUTILS_H_
11 
12 #include "angle_gl.h"
13 #include "common/PackedEnums.h"
14 #include "common/angleutils.h"
15 #include "libANGLE/Error.h"
16 
17 #include <EGL/egl.h>
18 
19 namespace gl
20 {
21 class Buffer;
22 class Context;
23 class Sync;
24 class Framebuffer;
25 class GLES1State;
26 class Program;
27 class Renderbuffer;
28 class Sampler;
29 class Shader;
30 class Texture;
31 struct TextureCaps;
32 struct UniformBlock;
33 struct VertexAttribute;
34 class VertexBinding;
35 struct VertexAttribCurrentValueData;
36 
37 void QueryFramebufferAttachmentParameteriv(const Context *context,
38                                            const Framebuffer *framebuffer,
39                                            GLenum attachment,
40                                            GLenum pname,
41                                            GLint *params);
42 void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params);
43 void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params);
44 void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params);
45 void QueryProgramiv(Context *context, const Program *program, GLenum pname, GLint *params);
46 void QueryRenderbufferiv(const Context *context,
47                          const Renderbuffer *renderbuffer,
48                          GLenum pname,
49                          GLint *params);
50 void QueryShaderiv(const Context *context, Shader *shader, GLenum pname, GLint *params);
51 void QueryTexLevelParameterfv(const Texture *texture,
52                               TextureTarget target,
53                               GLint level,
54                               GLenum pname,
55                               GLfloat *params);
56 void QueryTexLevelParameteriv(const Texture *texture,
57                               TextureTarget target,
58                               GLint level,
59                               GLenum pname,
60                               GLint *params);
61 void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params);
62 void QueryTexParameteriv(const Texture *texture, GLenum pname, GLint *params);
63 void QueryTexParameterIiv(const Texture *texture, GLenum pname, GLint *params);
64 void QueryTexParameterIuiv(const Texture *texture, GLenum pname, GLuint *params);
65 void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params);
66 void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params);
67 void QuerySamplerParameterIiv(const Sampler *sampler, GLenum pname, GLint *params);
68 void QuerySamplerParameterIuiv(const Sampler *sampler, GLenum pname, GLuint *params);
69 
70 // Warning: you should ensure binding really matches attrib.bindingIndex before using the following
71 // functions.
72 void QueryVertexAttribfv(const VertexAttribute &attrib,
73                          const VertexBinding &binding,
74                          const VertexAttribCurrentValueData &currentValueData,
75                          GLenum pname,
76                          GLfloat *params);
77 
78 void QueryVertexAttribiv(const VertexAttribute &attrib,
79                          const VertexBinding &binding,
80                          const VertexAttribCurrentValueData &currentValueData,
81                          GLenum pname,
82                          GLint *params);
83 
84 void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, void **pointer);
85 
86 void QueryVertexAttribIiv(const VertexAttribute &attrib,
87                           const VertexBinding &binding,
88                           const VertexAttribCurrentValueData &currentValueData,
89                           GLenum pname,
90                           GLint *params);
91 
92 void QueryVertexAttribIuiv(const VertexAttribute &attrib,
93                            const VertexBinding &binding,
94                            const VertexAttribCurrentValueData &currentValueData,
95                            GLenum pname,
96                            GLuint *params);
97 
98 void QueryActiveUniformBlockiv(const Program *program,
99                                GLuint uniformBlockIndex,
100                                GLenum pname,
101                                GLint *params);
102 
103 void QueryInternalFormativ(const TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params);
104 
105 void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params);
106 
107 angle::Result QuerySynciv(const Context *context,
108                           const Sync *sync,
109                           GLenum pname,
110                           GLsizei bufSize,
111                           GLsizei *length,
112                           GLint *values);
113 
114 void SetTexParameterf(Context *context, Texture *texture, GLenum pname, GLfloat param);
115 void SetTexParameterfv(Context *context, Texture *texture, GLenum pname, const GLfloat *params);
116 void SetTexParameteri(Context *context, Texture *texture, GLenum pname, GLint param);
117 void SetTexParameteriv(Context *context, Texture *texture, GLenum pname, const GLint *params);
118 void SetTexParameterIiv(Context *context, Texture *texture, GLenum pname, const GLint *params);
119 void SetTexParameterIuiv(Context *context, Texture *texture, GLenum pname, const GLuint *params);
120 
121 void SetSamplerParameterf(Context *context, Sampler *sampler, GLenum pname, GLfloat param);
122 void SetSamplerParameterfv(Context *context, Sampler *sampler, GLenum pname, const GLfloat *params);
123 void SetSamplerParameteri(Context *context, Sampler *sampler, GLenum pname, GLint param);
124 void SetSamplerParameteriv(Context *context, Sampler *sampler, GLenum pname, const GLint *params);
125 void SetSamplerParameterIiv(Context *context, Sampler *sampler, GLenum pname, const GLint *params);
126 void SetSamplerParameterIuiv(Context *context,
127                              Sampler *sampler,
128                              GLenum pname,
129                              const GLuint *params);
130 
131 void SetFramebufferParameteri(const Context *context,
132                               Framebuffer *framebuffer,
133                               GLenum pname,
134                               GLint param);
135 
136 void SetProgramParameteri(Program *program, GLenum pname, GLint value);
137 
138 GLint GetUniformResourceProperty(const Program *program, GLuint index, const GLenum prop);
139 
140 GLuint QueryProgramResourceIndex(const Program *program,
141                                  GLenum programInterface,
142                                  const GLchar *name);
143 
144 void QueryProgramResourceName(const Program *program,
145                               GLenum programInterface,
146                               GLuint index,
147                               GLsizei bufSize,
148                               GLsizei *length,
149                               GLchar *name);
150 
151 GLint QueryProgramResourceLocation(const Program *program,
152                                    GLenum programInterface,
153                                    const GLchar *name);
154 void QueryProgramResourceiv(const Program *program,
155                             GLenum programInterface,
156                             GLuint index,
157                             GLsizei propCount,
158                             const GLenum *props,
159                             GLsizei bufSize,
160                             GLsizei *length,
161                             GLint *params);
162 
163 void QueryProgramInterfaceiv(const Program *program,
164                              GLenum programInterface,
165                              GLenum pname,
166                              GLint *params);
167 // GLES1 emulation
168 
169 ClientVertexArrayType ParamToVertexArrayType(GLenum param);
170 
171 void SetLightParameters(GLES1State *state,
172                         GLenum light,
173                         LightParameter pname,
174                         const GLfloat *params);
175 void GetLightParameters(const GLES1State *state,
176                         GLenum light,
177                         LightParameter pname,
178                         GLfloat *params);
179 
180 void SetLightModelParameters(GLES1State *state, GLenum pname, const GLfloat *params);
181 void GetLightModelParameters(const GLES1State *state, GLenum pname, GLfloat *params);
182 bool IsLightModelTwoSided(const GLES1State *state);
183 
184 void SetMaterialParameters(GLES1State *state,
185                            GLenum face,
186                            MaterialParameter pname,
187                            const GLfloat *params);
188 void GetMaterialParameters(const GLES1State *state,
189                            GLenum face,
190                            MaterialParameter pname,
191                            GLfloat *params);
192 
193 unsigned int GetLightModelParameterCount(GLenum pname);
194 unsigned int GetLightParameterCount(LightParameter pname);
195 unsigned int GetMaterialParameterCount(MaterialParameter pname);
196 
197 void SetFogParameters(GLES1State *state, GLenum pname, const GLfloat *params);
198 void GetFogParameters(const GLES1State *state, GLenum pname, GLfloat *params);
199 unsigned int GetFogParameterCount(GLenum pname);
200 
201 unsigned int GetTextureEnvParameterCount(TextureEnvParameter pname);
202 
203 void ConvertTextureEnvFromInt(TextureEnvParameter pname, const GLint *input, GLfloat *output);
204 void ConvertTextureEnvFromFixed(TextureEnvParameter pname, const GLfixed *input, GLfloat *output);
205 void ConvertTextureEnvToInt(TextureEnvParameter pname, const GLfloat *input, GLint *output);
206 void ConvertTextureEnvToFixed(TextureEnvParameter pname, const GLfloat *input, GLfixed *output);
207 
208 void SetTextureEnv(unsigned int unit,
209                    GLES1State *state,
210                    TextureEnvTarget target,
211                    TextureEnvParameter pname,
212                    const GLfloat *params);
213 void GetTextureEnv(unsigned int unit,
214                    const GLES1State *state,
215                    TextureEnvTarget target,
216                    TextureEnvParameter pname,
217                    GLfloat *params);
218 
219 unsigned int GetPointParameterCount(PointParameter pname);
220 
221 void SetPointParameter(GLES1State *state, PointParameter pname, const GLfloat *params);
222 void GetPointParameter(const GLES1State *state, PointParameter pname, GLfloat *params);
223 
224 void SetPointSize(GLES1State *state, GLfloat size);
225 void GetPointSize(GLES1State *state, GLfloat *sizeOut);
226 
227 unsigned int GetTexParameterCount(GLenum pname);
228 
229 }  // namespace gl
230 
231 namespace egl
232 {
233 struct Config;
234 class Display;
235 class Surface;
236 class Sync;
237 
238 void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value);
239 
240 void QueryContextAttrib(const gl::Context *context, EGLint attribute, EGLint *value);
241 
242 void QuerySurfaceAttrib(const Surface *surface, EGLint attribute, EGLint *value);
243 void SetSurfaceAttrib(Surface *surface, EGLint attribute, EGLint value);
244 Error GetSyncAttrib(Display *display, Sync *sync, EGLint attribute, EGLint *value);
245 
246 }  // namespace egl
247 
248 #endif  // LIBANGLE_QUERYUTILS_H_
249