1 //
2 // Copyright 2023 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 // context_private_call.cpp:
8 // Helpers that set/get state that is entirely locally accessed by the context.
9
10 #include "libANGLE/context_private_call_autogen.h"
11
12 #include "common/debug.h"
13 #include "libANGLE/queryconversions.h"
14 #include "libANGLE/queryutils.h"
15
16 namespace
17 {
FixedMatrixToMat4(const GLfixed * m)18 inline angle::Mat4 FixedMatrixToMat4(const GLfixed *m)
19 {
20 angle::Mat4 matrixAsFloat;
21 GLfloat *floatData = matrixAsFloat.data();
22
23 for (int i = 0; i < 16; i++)
24 {
25 floatData[i] = gl::ConvertFixedToFloat(m[i]);
26 }
27
28 return matrixAsFloat;
29 }
30 } // namespace
31
32 namespace gl
33 {
ContextPrivateClearColor(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)34 inline void ContextPrivateClearColor(PrivateState *privateState,
35 PrivateStateCache *privateStateCache,
36 GLfloat red,
37 GLfloat green,
38 GLfloat blue,
39 GLfloat alpha)
40 {
41 privateState->setColorClearValue(red, green, blue, alpha);
42 }
43
ContextPrivateClearDepthf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat depth)44 inline void ContextPrivateClearDepthf(PrivateState *privateState,
45 PrivateStateCache *privateStateCache,
46 GLfloat depth)
47 {
48 privateState->setDepthClearValue(clamp01(depth));
49 }
50
ContextPrivateClearStencil(PrivateState * privateState,PrivateStateCache * privateStateCache,GLint stencil)51 inline void ContextPrivateClearStencil(PrivateState *privateState,
52 PrivateStateCache *privateStateCache,
53 GLint stencil)
54 {
55 privateState->setStencilClearValue(stencil);
56 }
57
ContextPrivateClearColorx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed red,GLfixed green,GLfixed blue,GLfixed alpha)58 inline void ContextPrivateClearColorx(PrivateState *privateState,
59 PrivateStateCache *privateStateCache,
60 GLfixed red,
61 GLfixed green,
62 GLfixed blue,
63 GLfixed alpha)
64 {
65 ContextPrivateClearColor(privateState, privateStateCache, ConvertFixedToFloat(red),
66 ConvertFixedToFloat(green), ConvertFixedToFloat(blue),
67 ConvertFixedToFloat(alpha));
68 }
69
ContextPrivateClearDepthx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed depth)70 inline void ContextPrivateClearDepthx(PrivateState *privateState,
71 PrivateStateCache *privateStateCache,
72 GLfixed depth)
73 {
74 ContextPrivateClearDepthf(privateState, privateStateCache, ConvertFixedToFloat(depth));
75 }
76
ContextPrivateColorMask(PrivateState * privateState,PrivateStateCache * privateStateCache,GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)77 inline void ContextPrivateColorMask(PrivateState *privateState,
78 PrivateStateCache *privateStateCache,
79 GLboolean red,
80 GLboolean green,
81 GLboolean blue,
82 GLboolean alpha)
83 {
84 privateState->setColorMask(ConvertToBool(red), ConvertToBool(green), ConvertToBool(blue),
85 ConvertToBool(alpha));
86 privateStateCache->onColorMaskChange();
87 }
88
ContextPrivateColorMaski(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLboolean r,GLboolean g,GLboolean b,GLboolean a)89 inline void ContextPrivateColorMaski(PrivateState *privateState,
90 PrivateStateCache *privateStateCache,
91 GLuint index,
92 GLboolean r,
93 GLboolean g,
94 GLboolean b,
95 GLboolean a)
96 {
97 privateState->setColorMaskIndexed(ConvertToBool(r), ConvertToBool(g), ConvertToBool(b),
98 ConvertToBool(a), index);
99 privateStateCache->onColorMaskChange();
100 }
101
ContextPrivateDepthMask(PrivateState * privateState,PrivateStateCache * privateStateCache,GLboolean flag)102 inline void ContextPrivateDepthMask(PrivateState *privateState,
103 PrivateStateCache *privateStateCache,
104 GLboolean flag)
105 {
106 privateState->setDepthMask(ConvertToBool(flag));
107 }
108
ContextPrivateDisable(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum cap)109 inline void ContextPrivateDisable(PrivateState *privateState,
110 PrivateStateCache *privateStateCache,
111 GLenum cap)
112 {
113 privateState->setEnableFeature(cap, false);
114 privateStateCache->onCapChange();
115 }
116
ContextPrivateDisablei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLuint index)117 inline void ContextPrivateDisablei(PrivateState *privateState,
118 PrivateStateCache *privateStateCache,
119 GLenum target,
120 GLuint index)
121 {
122 privateState->setEnableFeatureIndexed(target, false, index);
123 privateStateCache->onCapChange();
124 }
125
ContextPrivateEnable(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum cap)126 inline void ContextPrivateEnable(PrivateState *privateState,
127 PrivateStateCache *privateStateCache,
128 GLenum cap)
129 {
130 privateState->setEnableFeature(cap, true);
131 privateStateCache->onCapChange();
132 }
133
ContextPrivateEnablei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLuint index)134 inline void ContextPrivateEnablei(PrivateState *privateState,
135 PrivateStateCache *privateStateCache,
136 GLenum target,
137 GLuint index)
138 {
139 privateState->setEnableFeatureIndexed(target, true, index);
140 privateStateCache->onCapChange();
141 }
142
ContextPrivateActiveTexture(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum texture)143 inline void ContextPrivateActiveTexture(PrivateState *privateState,
144 PrivateStateCache *privateStateCache,
145 GLenum texture)
146 {
147 privateState->setActiveSampler(texture - GL_TEXTURE0);
148 }
149
ContextPrivateCullFace(PrivateState * privateState,PrivateStateCache * privateStateCache,CullFaceMode mode)150 inline void ContextPrivateCullFace(PrivateState *privateState,
151 PrivateStateCache *privateStateCache,
152 CullFaceMode mode)
153 {
154 privateState->setCullMode(mode);
155 }
156
ContextPrivateDepthFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum func)157 inline void ContextPrivateDepthFunc(PrivateState *privateState,
158 PrivateStateCache *privateStateCache,
159 GLenum func)
160 {
161 privateState->setDepthFunc(func);
162 }
163
ContextPrivateDepthRangef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat zNear,GLfloat zFar)164 inline void ContextPrivateDepthRangef(PrivateState *privateState,
165 PrivateStateCache *privateStateCache,
166 GLfloat zNear,
167 GLfloat zFar)
168 {
169 privateState->setDepthRange(clamp01(zNear), clamp01(zFar));
170 }
171
ContextPrivateDepthRangex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed zNear,GLfixed zFar)172 inline void ContextPrivateDepthRangex(PrivateState *privateState,
173 PrivateStateCache *privateStateCache,
174 GLfixed zNear,
175 GLfixed zFar)
176 {
177 ContextPrivateDepthRangef(privateState, privateStateCache, ConvertFixedToFloat(zNear),
178 ConvertFixedToFloat(zFar));
179 }
180
ContextPrivateFrontFace(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum mode)181 inline void ContextPrivateFrontFace(PrivateState *privateState,
182 PrivateStateCache *privateStateCache,
183 GLenum mode)
184 {
185 privateState->setFrontFace(mode);
186 }
187
ContextPrivateLineWidth(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat width)188 inline void ContextPrivateLineWidth(PrivateState *privateState,
189 PrivateStateCache *privateStateCache,
190 GLfloat width)
191 {
192 privateState->setLineWidth(width);
193 }
194
ContextPrivateLineWidthx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed width)195 inline void ContextPrivateLineWidthx(PrivateState *privateState,
196 PrivateStateCache *privateStateCache,
197 GLfixed width)
198 {
199 ContextPrivateLineWidth(privateState, privateStateCache, ConvertFixedToFloat(width));
200 }
201
ContextPrivatePolygonOffset(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat factor,GLfloat units)202 inline void ContextPrivatePolygonOffset(PrivateState *privateState,
203 PrivateStateCache *privateStateCache,
204 GLfloat factor,
205 GLfloat units)
206 {
207 privateState->setPolygonOffsetParams(factor, units, 0.0f);
208 }
209
ContextPrivatePolygonOffsetClamp(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat factor,GLfloat units,GLfloat clamp)210 inline void ContextPrivatePolygonOffsetClamp(PrivateState *privateState,
211 PrivateStateCache *privateStateCache,
212 GLfloat factor,
213 GLfloat units,
214 GLfloat clamp)
215 {
216 privateState->setPolygonOffsetParams(factor, units, clamp);
217 }
218
ContextPrivatePolygonOffsetx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed factor,GLfixed units)219 inline void ContextPrivatePolygonOffsetx(PrivateState *privateState,
220 PrivateStateCache *privateStateCache,
221 GLfixed factor,
222 GLfixed units)
223 {
224 ContextPrivatePolygonOffsetClamp(privateState, privateStateCache, ConvertFixedToFloat(factor),
225 ConvertFixedToFloat(units), 0.0f);
226 }
227
ContextPrivateSampleCoverage(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat value,GLboolean invert)228 inline void ContextPrivateSampleCoverage(PrivateState *privateState,
229 PrivateStateCache *privateStateCache,
230 GLfloat value,
231 GLboolean invert)
232 {
233 privateState->setSampleCoverageParams(clamp01(value), ConvertToBool(invert));
234 }
235
ContextPrivateSampleCoveragex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLclampx value,GLboolean invert)236 inline void ContextPrivateSampleCoveragex(PrivateState *privateState,
237 PrivateStateCache *privateStateCache,
238 GLclampx value,
239 GLboolean invert)
240 {
241 ContextPrivateSampleCoverage(privateState, privateStateCache, ConvertFixedToFloat(value),
242 invert);
243 }
244
ContextPrivateScissor(PrivateState * privateState,PrivateStateCache * privateStateCache,GLint x,GLint y,GLsizei width,GLsizei height)245 inline void ContextPrivateScissor(PrivateState *privateState,
246 PrivateStateCache *privateStateCache,
247 GLint x,
248 GLint y,
249 GLsizei width,
250 GLsizei height)
251 {
252 privateState->setScissorParams(x, y, width, height);
253 }
254
ContextPrivateVertexAttrib1f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x)255 inline void ContextPrivateVertexAttrib1f(PrivateState *privateState,
256 PrivateStateCache *privateStateCache,
257 GLuint index,
258 GLfloat x)
259 {
260 GLfloat vals[4] = {x, 0, 0, 1};
261 privateState->setVertexAttribf(index, vals);
262 privateStateCache->onDefaultVertexAttributeChange();
263 }
264
ContextPrivateVertexAttrib1fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)265 inline void ContextPrivateVertexAttrib1fv(PrivateState *privateState,
266 PrivateStateCache *privateStateCache,
267 GLuint index,
268 const GLfloat *values)
269 {
270 GLfloat vals[4] = {values[0], 0, 0, 1};
271 privateState->setVertexAttribf(index, vals);
272 privateStateCache->onDefaultVertexAttributeChange();
273 }
274
ContextPrivateVertexAttrib2f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x,GLfloat y)275 inline void ContextPrivateVertexAttrib2f(PrivateState *privateState,
276 PrivateStateCache *privateStateCache,
277 GLuint index,
278 GLfloat x,
279 GLfloat y)
280 {
281 GLfloat vals[4] = {x, y, 0, 1};
282 privateState->setVertexAttribf(index, vals);
283 privateStateCache->onDefaultVertexAttributeChange();
284 }
285
ContextPrivateVertexAttrib2fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)286 inline void ContextPrivateVertexAttrib2fv(PrivateState *privateState,
287 PrivateStateCache *privateStateCache,
288 GLuint index,
289 const GLfloat *values)
290 {
291 GLfloat vals[4] = {values[0], values[1], 0, 1};
292 privateState->setVertexAttribf(index, vals);
293 privateStateCache->onDefaultVertexAttributeChange();
294 }
295
ContextPrivateVertexAttrib3f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x,GLfloat y,GLfloat z)296 inline void ContextPrivateVertexAttrib3f(PrivateState *privateState,
297 PrivateStateCache *privateStateCache,
298 GLuint index,
299 GLfloat x,
300 GLfloat y,
301 GLfloat z)
302 {
303 GLfloat vals[4] = {x, y, z, 1};
304 privateState->setVertexAttribf(index, vals);
305 privateStateCache->onDefaultVertexAttributeChange();
306 }
307
ContextPrivateVertexAttrib3fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)308 inline void ContextPrivateVertexAttrib3fv(PrivateState *privateState,
309 PrivateStateCache *privateStateCache,
310 GLuint index,
311 const GLfloat *values)
312 {
313 GLfloat vals[4] = {values[0], values[1], values[2], 1};
314 privateState->setVertexAttribf(index, vals);
315 privateStateCache->onDefaultVertexAttributeChange();
316 }
317
ContextPrivateVertexAttrib4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLfloat x,GLfloat y,GLfloat z,GLfloat w)318 inline void ContextPrivateVertexAttrib4f(PrivateState *privateState,
319 PrivateStateCache *privateStateCache,
320 GLuint index,
321 GLfloat x,
322 GLfloat y,
323 GLfloat z,
324 GLfloat w)
325 {
326 GLfloat vals[4] = {x, y, z, w};
327 privateState->setVertexAttribf(index, vals);
328 privateStateCache->onDefaultVertexAttributeChange();
329 }
330
ContextPrivateVertexAttrib4fv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLfloat * values)331 inline void ContextPrivateVertexAttrib4fv(PrivateState *privateState,
332 PrivateStateCache *privateStateCache,
333 GLuint index,
334 const GLfloat *values)
335 {
336 privateState->setVertexAttribf(index, values);
337 privateStateCache->onDefaultVertexAttributeChange();
338 }
339
ContextPrivateVertexAttribI4i(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLint x,GLint y,GLint z,GLint w)340 inline void ContextPrivateVertexAttribI4i(PrivateState *privateState,
341 PrivateStateCache *privateStateCache,
342 GLuint index,
343 GLint x,
344 GLint y,
345 GLint z,
346 GLint w)
347 {
348 GLint vals[4] = {x, y, z, w};
349 privateState->setVertexAttribi(index, vals);
350 privateStateCache->onDefaultVertexAttributeChange();
351 }
352
ContextPrivateVertexAttribI4iv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLint * values)353 inline void ContextPrivateVertexAttribI4iv(PrivateState *privateState,
354 PrivateStateCache *privateStateCache,
355 GLuint index,
356 const GLint *values)
357 {
358 privateState->setVertexAttribi(index, values);
359 privateStateCache->onDefaultVertexAttributeChange();
360 }
361
ContextPrivateVertexAttribI4ui(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,GLuint x,GLuint y,GLuint z,GLuint w)362 inline void ContextPrivateVertexAttribI4ui(PrivateState *privateState,
363 PrivateStateCache *privateStateCache,
364 GLuint index,
365 GLuint x,
366 GLuint y,
367 GLuint z,
368 GLuint w)
369 {
370 GLuint vals[4] = {x, y, z, w};
371 privateState->setVertexAttribu(index, vals);
372 privateStateCache->onDefaultVertexAttributeChange();
373 }
374
ContextPrivateVertexAttribI4uiv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint index,const GLuint * values)375 inline void ContextPrivateVertexAttribI4uiv(PrivateState *privateState,
376 PrivateStateCache *privateStateCache,
377 GLuint index,
378 const GLuint *values)
379 {
380 privateState->setVertexAttribu(index, values);
381 privateStateCache->onDefaultVertexAttributeChange();
382 }
383
ContextPrivateViewport(PrivateState * privateState,PrivateStateCache * privateStateCache,GLint x,GLint y,GLsizei width,GLsizei height)384 inline void ContextPrivateViewport(PrivateState *privateState,
385 PrivateStateCache *privateStateCache,
386 GLint x,
387 GLint y,
388 GLsizei width,
389 GLsizei height)
390 {
391 privateState->setViewportParams(x, y, width, height);
392 }
393
ContextPrivateSampleMaski(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint maskNumber,GLbitfield mask)394 inline void ContextPrivateSampleMaski(PrivateState *privateState,
395 PrivateStateCache *privateStateCache,
396 GLuint maskNumber,
397 GLbitfield mask)
398 {
399 privateState->setSampleMaskParams(maskNumber, mask);
400 }
401
ContextPrivateMinSampleShading(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat value)402 inline void ContextPrivateMinSampleShading(PrivateState *privateState,
403 PrivateStateCache *privateStateCache,
404 GLfloat value)
405 {
406 privateState->setMinSampleShading(value);
407 }
408
ContextPrivatePrimitiveBoundingBox(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat minX,GLfloat minY,GLfloat minZ,GLfloat minW,GLfloat maxX,GLfloat maxY,GLfloat maxZ,GLfloat maxW)409 inline void ContextPrivatePrimitiveBoundingBox(PrivateState *privateState,
410 PrivateStateCache *privateStateCache,
411 GLfloat minX,
412 GLfloat minY,
413 GLfloat minZ,
414 GLfloat minW,
415 GLfloat maxX,
416 GLfloat maxY,
417 GLfloat maxZ,
418 GLfloat maxW)
419 {
420 privateState->setBoundingBox(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
421 }
422
ContextPrivateLogicOp(PrivateState * privateState,PrivateStateCache * privateStateCache,LogicalOperation opcode)423 inline void ContextPrivateLogicOp(PrivateState *privateState,
424 PrivateStateCache *privateStateCache,
425 LogicalOperation opcode)
426 {
427 privateState->getMutableGLES1State()->setLogicOp(opcode);
428 }
429
ContextPrivateLogicOpANGLE(PrivateState * privateState,PrivateStateCache * privateStateCache,LogicalOperation opcode)430 inline void ContextPrivateLogicOpANGLE(PrivateState *privateState,
431 PrivateStateCache *privateStateCache,
432 LogicalOperation opcode)
433 {
434 privateState->setLogicOp(opcode);
435 }
436
ContextPrivatePolygonMode(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,PolygonMode mode)437 inline void ContextPrivatePolygonMode(PrivateState *privateState,
438 PrivateStateCache *privateStateCache,
439 GLenum face,
440 PolygonMode mode)
441 {
442 ASSERT(face == GL_FRONT_AND_BACK);
443 privateState->setPolygonMode(mode);
444 }
445
ContextPrivatePolygonModeNV(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,PolygonMode mode)446 inline void ContextPrivatePolygonModeNV(PrivateState *privateState,
447 PrivateStateCache *privateStateCache,
448 GLenum face,
449 PolygonMode mode)
450 {
451 ContextPrivatePolygonMode(privateState, privateStateCache, face, mode);
452 }
453
ContextPrivateProvokingVertex(PrivateState * privateState,PrivateStateCache * privateStateCache,ProvokingVertexConvention provokeMode)454 inline void ContextPrivateProvokingVertex(PrivateState *privateState,
455 PrivateStateCache *privateStateCache,
456 ProvokingVertexConvention provokeMode)
457 {
458 privateState->setProvokingVertex(provokeMode);
459 }
460
ContextPrivateCoverageModulation(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum components)461 inline void ContextPrivateCoverageModulation(PrivateState *privateState,
462 PrivateStateCache *privateStateCache,
463 GLenum components)
464 {
465 privateState->setCoverageModulation(components);
466 }
467
ContextPrivateClipControl(PrivateState * privateState,PrivateStateCache * privateStateCache,ClipOrigin origin,ClipDepthMode depth)468 inline void ContextPrivateClipControl(PrivateState *privateState,
469 PrivateStateCache *privateStateCache,
470 ClipOrigin origin,
471 ClipDepthMode depth)
472 {
473 privateState->setClipControl(origin, depth);
474 }
475
ContextPrivateShadingRate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum rate)476 inline void ContextPrivateShadingRate(PrivateState *privateState,
477 PrivateStateCache *privateStateCache,
478 GLenum rate)
479 {
480 privateState->setShadingRate(rate);
481 }
482
ContextPrivateBlendColor(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)483 inline void ContextPrivateBlendColor(PrivateState *privateState,
484 PrivateStateCache *privateStateCache,
485 GLfloat red,
486 GLfloat green,
487 GLfloat blue,
488 GLfloat alpha)
489 {
490 privateState->setBlendColor(red, green, blue, alpha);
491 }
492
ContextPrivateBlendEquation(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum mode)493 inline void ContextPrivateBlendEquation(PrivateState *privateState,
494 PrivateStateCache *privateStateCache,
495 GLenum mode)
496 {
497 privateState->setBlendEquation(mode, mode);
498 if (privateState->getExtensions().blendEquationAdvancedKHR)
499 {
500 privateStateCache->onBlendEquationOrFuncChange();
501 }
502 }
503
ContextPrivateBlendEquationi(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum mode)504 inline void ContextPrivateBlendEquationi(PrivateState *privateState,
505 PrivateStateCache *privateStateCache,
506 GLuint buf,
507 GLenum mode)
508 {
509 privateState->setBlendEquationIndexed(mode, mode, buf);
510 if (privateState->getExtensions().blendEquationAdvancedKHR)
511 {
512 privateStateCache->onBlendEquationOrFuncChange();
513 }
514 }
515
ContextPrivateBlendEquationSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum modeRGB,GLenum modeAlpha)516 inline void ContextPrivateBlendEquationSeparate(PrivateState *privateState,
517 PrivateStateCache *privateStateCache,
518 GLenum modeRGB,
519 GLenum modeAlpha)
520 {
521 privateState->setBlendEquation(modeRGB, modeAlpha);
522 if (privateState->getExtensions().blendEquationAdvancedKHR)
523 {
524 privateStateCache->onBlendEquationOrFuncChange();
525 }
526 }
527
ContextPrivateBlendEquationSeparatei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum modeRGB,GLenum modeAlpha)528 inline void ContextPrivateBlendEquationSeparatei(PrivateState *privateState,
529 PrivateStateCache *privateStateCache,
530 GLuint buf,
531 GLenum modeRGB,
532 GLenum modeAlpha)
533 {
534 privateState->setBlendEquationIndexed(modeRGB, modeAlpha, buf);
535 if (privateState->getExtensions().blendEquationAdvancedKHR)
536 {
537 privateStateCache->onBlendEquationOrFuncChange();
538 }
539 }
540
ContextPrivateBlendFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum sfactor,GLenum dfactor)541 inline void ContextPrivateBlendFunc(PrivateState *privateState,
542 PrivateStateCache *privateStateCache,
543 GLenum sfactor,
544 GLenum dfactor)
545 {
546 privateState->setBlendFactors(sfactor, dfactor, sfactor, dfactor);
547 if (privateState->getExtensions().blendFuncExtendedEXT)
548 {
549 privateStateCache->onBlendEquationOrFuncChange();
550 }
551 }
552
ContextPrivateBlendFunci(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum src,GLenum dst)553 inline void ContextPrivateBlendFunci(PrivateState *privateState,
554 PrivateStateCache *privateStateCache,
555 GLuint buf,
556 GLenum src,
557 GLenum dst)
558 {
559 privateState->setBlendFactorsIndexed(src, dst, src, dst, buf);
560 if (privateState->noSimultaneousConstantColorAndAlphaBlendFunc() ||
561 privateState->getExtensions().blendFuncExtendedEXT)
562 {
563 privateStateCache->onBlendEquationOrFuncChange();
564 }
565 }
566
ContextPrivateBlendFuncSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)567 inline void ContextPrivateBlendFuncSeparate(PrivateState *privateState,
568 PrivateStateCache *privateStateCache,
569 GLenum srcRGB,
570 GLenum dstRGB,
571 GLenum srcAlpha,
572 GLenum dstAlpha)
573 {
574 privateState->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
575 if (privateState->getExtensions().blendFuncExtendedEXT)
576 {
577 privateStateCache->onBlendEquationOrFuncChange();
578 }
579 }
580
ContextPrivateBlendFuncSeparatei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint buf,GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)581 inline void ContextPrivateBlendFuncSeparatei(PrivateState *privateState,
582 PrivateStateCache *privateStateCache,
583 GLuint buf,
584 GLenum srcRGB,
585 GLenum dstRGB,
586 GLenum srcAlpha,
587 GLenum dstAlpha)
588 {
589 privateState->setBlendFactorsIndexed(srcRGB, dstRGB, srcAlpha, dstAlpha, buf);
590 if (privateState->noSimultaneousConstantColorAndAlphaBlendFunc() ||
591 privateState->getExtensions().blendFuncExtendedEXT)
592 {
593 privateStateCache->onBlendEquationOrFuncChange();
594 }
595 }
596
ContextPrivateStencilFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum func,GLint ref,GLuint mask)597 inline void ContextPrivateStencilFunc(PrivateState *privateState,
598 PrivateStateCache *privateStateCache,
599 GLenum func,
600 GLint ref,
601 GLuint mask)
602 {
603 ContextPrivateStencilFuncSeparate(privateState, privateStateCache, GL_FRONT_AND_BACK, func, ref,
604 mask);
605 }
606
ContextPrivateStencilFuncSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,GLenum func,GLint ref,GLuint mask)607 inline void ContextPrivateStencilFuncSeparate(PrivateState *privateState,
608 PrivateStateCache *privateStateCache,
609 GLenum face,
610 GLenum func,
611 GLint ref,
612 GLuint mask)
613 {
614 GLint clampedRef = gl::clamp(ref, 0, std::numeric_limits<uint8_t>::max());
615 if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
616 {
617 privateState->setStencilParams(func, clampedRef, mask);
618 }
619
620 if (face == GL_BACK || face == GL_FRONT_AND_BACK)
621 {
622 privateState->setStencilBackParams(func, clampedRef, mask);
623 }
624
625 privateStateCache->onStencilStateChange();
626 }
627
ContextPrivateStencilMask(PrivateState * privateState,PrivateStateCache * privateStateCache,GLuint mask)628 inline void ContextPrivateStencilMask(PrivateState *privateState,
629 PrivateStateCache *privateStateCache,
630 GLuint mask)
631 {
632 ContextPrivateStencilMaskSeparate(privateState, privateStateCache, GL_FRONT_AND_BACK, mask);
633 }
634
ContextPrivateStencilMaskSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,GLuint mask)635 inline void ContextPrivateStencilMaskSeparate(PrivateState *privateState,
636 PrivateStateCache *privateStateCache,
637 GLenum face,
638 GLuint mask)
639 {
640 if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
641 {
642 privateState->setStencilWritemask(mask);
643 }
644
645 if (face == GL_BACK || face == GL_FRONT_AND_BACK)
646 {
647 privateState->setStencilBackWritemask(mask);
648 }
649
650 privateStateCache->onStencilStateChange();
651 }
652
ContextPrivateStencilOp(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum fail,GLenum zfail,GLenum zpass)653 inline void ContextPrivateStencilOp(PrivateState *privateState,
654 PrivateStateCache *privateStateCache,
655 GLenum fail,
656 GLenum zfail,
657 GLenum zpass)
658 {
659 ContextPrivateStencilOpSeparate(privateState, privateStateCache, GL_FRONT_AND_BACK, fail, zfail,
660 zpass);
661 }
662
ContextPrivateStencilOpSeparate(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,GLenum fail,GLenum zfail,GLenum zpass)663 inline void ContextPrivateStencilOpSeparate(PrivateState *privateState,
664 PrivateStateCache *privateStateCache,
665 GLenum face,
666 GLenum fail,
667 GLenum zfail,
668 GLenum zpass)
669 {
670 if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
671 {
672 privateState->setStencilOperations(fail, zfail, zpass);
673 }
674
675 if (face == GL_BACK || face == GL_FRONT_AND_BACK)
676 {
677 privateState->setStencilBackOperations(fail, zfail, zpass);
678 }
679 }
680
ContextPrivatePixelStorei(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLint param)681 inline void ContextPrivatePixelStorei(PrivateState *privateState,
682 PrivateStateCache *privateStateCache,
683 GLenum pname,
684 GLint param)
685 {
686 switch (pname)
687 {
688 case GL_UNPACK_ALIGNMENT:
689 privateState->setUnpackAlignment(param);
690 break;
691
692 case GL_PACK_ALIGNMENT:
693 privateState->setPackAlignment(param);
694 break;
695
696 case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
697 privateState->setPackReverseRowOrder(param != 0);
698 break;
699
700 case GL_UNPACK_ROW_LENGTH:
701 ASSERT(privateState->getClientMajorVersion() >= 3 ||
702 privateState->getExtensions().unpackSubimageEXT);
703 privateState->setUnpackRowLength(param);
704 break;
705
706 case GL_UNPACK_IMAGE_HEIGHT:
707 ASSERT(privateState->getClientMajorVersion() >= 3);
708 privateState->setUnpackImageHeight(param);
709 break;
710
711 case GL_UNPACK_SKIP_IMAGES:
712 ASSERT(privateState->getClientMajorVersion() >= 3);
713 privateState->setUnpackSkipImages(param);
714 break;
715
716 case GL_UNPACK_SKIP_ROWS:
717 ASSERT((privateState->getClientMajorVersion() >= 3) ||
718 privateState->getExtensions().unpackSubimageEXT);
719 privateState->setUnpackSkipRows(param);
720 break;
721
722 case GL_UNPACK_SKIP_PIXELS:
723 ASSERT((privateState->getClientMajorVersion() >= 3) ||
724 privateState->getExtensions().unpackSubimageEXT);
725 privateState->setUnpackSkipPixels(param);
726 break;
727
728 case GL_PACK_ROW_LENGTH:
729 ASSERT((privateState->getClientMajorVersion() >= 3) ||
730 privateState->getExtensions().packSubimageNV);
731 privateState->setPackRowLength(param);
732 break;
733
734 case GL_PACK_SKIP_ROWS:
735 ASSERT((privateState->getClientMajorVersion() >= 3) ||
736 privateState->getExtensions().packSubimageNV);
737 privateState->setPackSkipRows(param);
738 break;
739
740 case GL_PACK_SKIP_PIXELS:
741 ASSERT((privateState->getClientMajorVersion() >= 3) ||
742 privateState->getExtensions().packSubimageNV);
743 privateState->setPackSkipPixels(param);
744 break;
745
746 default:
747 UNREACHABLE();
748 return;
749 }
750 }
751
ContextPrivateHint(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLenum mode)752 inline void ContextPrivateHint(PrivateState *privateState,
753 PrivateStateCache *privateStateCache,
754 GLenum target,
755 GLenum mode)
756 {
757 switch (target)
758 {
759 case GL_GENERATE_MIPMAP_HINT:
760 privateState->setGenerateMipmapHint(mode);
761 break;
762
763 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
764 privateState->setFragmentShaderDerivativeHint(mode);
765 break;
766
767 case GL_PERSPECTIVE_CORRECTION_HINT:
768 case GL_POINT_SMOOTH_HINT:
769 case GL_LINE_SMOOTH_HINT:
770 case GL_FOG_HINT:
771 privateState->getMutableGLES1State()->setHint(target, mode);
772 break;
773 default:
774 UNREACHABLE();
775 return;
776 }
777 }
778
ContextPrivateIsEnabled(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum cap)779 inline GLboolean ContextPrivateIsEnabled(PrivateState *privateState,
780 PrivateStateCache *privateStateCache,
781 GLenum cap)
782 {
783 return privateState->getEnableFeature(cap);
784 }
785
ContextPrivateIsEnabledi(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLuint index)786 inline GLboolean ContextPrivateIsEnabledi(PrivateState *privateState,
787 PrivateStateCache *privateStateCache,
788 GLenum target,
789 GLuint index)
790 {
791 return privateState->getEnableFeatureIndexed(target, index);
792 }
793
ContextPrivatePatchParameteri(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLint value)794 inline void ContextPrivatePatchParameteri(PrivateState *privateState,
795 PrivateStateCache *privateStateCache,
796 GLenum pname,
797 GLint value)
798 {
799 switch (pname)
800 {
801 case GL_PATCH_VERTICES:
802 privateState->setPatchVertices(value);
803 break;
804 default:
805 break;
806 }
807 }
808
ContextPrivateAlphaFunc(PrivateState * privateState,PrivateStateCache * privateStateCache,AlphaTestFunc func,GLfloat ref)809 inline void ContextPrivateAlphaFunc(PrivateState *privateState,
810 PrivateStateCache *privateStateCache,
811 AlphaTestFunc func,
812 GLfloat ref)
813 {
814 privateState->getMutableGLES1State()->setAlphaTestParameters(func, ref);
815 }
816
ContextPrivateAlphaFuncx(PrivateState * privateState,PrivateStateCache * privateStateCache,AlphaTestFunc func,GLfixed ref)817 inline void ContextPrivateAlphaFuncx(PrivateState *privateState,
818 PrivateStateCache *privateStateCache,
819 AlphaTestFunc func,
820 GLfixed ref)
821 {
822 ContextPrivateAlphaFunc(privateState, privateStateCache, func, ConvertFixedToFloat(ref));
823 }
824
ContextPrivateClipPlanef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum p,const GLfloat * eqn)825 inline void ContextPrivateClipPlanef(PrivateState *privateState,
826 PrivateStateCache *privateStateCache,
827 GLenum p,
828 const GLfloat *eqn)
829 {
830 privateState->getMutableGLES1State()->setClipPlane(p - GL_CLIP_PLANE0, eqn);
831 }
832
ContextPrivateClipPlanex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum plane,const GLfixed * equation)833 inline void ContextPrivateClipPlanex(PrivateState *privateState,
834 PrivateStateCache *privateStateCache,
835 GLenum plane,
836 const GLfixed *equation)
837 {
838 const GLfloat equationf[4] = {
839 ConvertFixedToFloat(equation[0]),
840 ConvertFixedToFloat(equation[1]),
841 ConvertFixedToFloat(equation[2]),
842 ConvertFixedToFloat(equation[3]),
843 };
844
845 ContextPrivateClipPlanef(privateState, privateStateCache, plane, equationf);
846 }
847
ContextPrivateColor4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)848 inline void ContextPrivateColor4f(PrivateState *privateState,
849 PrivateStateCache *privateStateCache,
850 GLfloat red,
851 GLfloat green,
852 GLfloat blue,
853 GLfloat alpha)
854 {
855 privateState->getMutableGLES1State()->setCurrentColor({red, green, blue, alpha});
856 }
857
ContextPrivateColor4ub(PrivateState * privateState,PrivateStateCache * privateStateCache,GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)858 inline void ContextPrivateColor4ub(PrivateState *privateState,
859 PrivateStateCache *privateStateCache,
860 GLubyte red,
861 GLubyte green,
862 GLubyte blue,
863 GLubyte alpha)
864 {
865 ContextPrivateColor4f(privateState, privateStateCache, normalizedToFloat<uint8_t>(red),
866 normalizedToFloat<uint8_t>(green), normalizedToFloat<uint8_t>(blue),
867 normalizedToFloat<uint8_t>(alpha));
868 }
869
ContextPrivateColor4x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed red,GLfixed green,GLfixed blue,GLfixed alpha)870 inline void ContextPrivateColor4x(PrivateState *privateState,
871 PrivateStateCache *privateStateCache,
872 GLfixed red,
873 GLfixed green,
874 GLfixed blue,
875 GLfixed alpha)
876 {
877 ContextPrivateColor4f(privateState, privateStateCache, ConvertFixedToFloat(red),
878 ConvertFixedToFloat(green), ConvertFixedToFloat(blue),
879 ConvertFixedToFloat(alpha));
880 }
881
ContextPrivateFogf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfloat param)882 inline void ContextPrivateFogf(PrivateState *privateState,
883 PrivateStateCache *privateStateCache,
884 GLenum pname,
885 GLfloat param)
886 {
887 ContextPrivateFogfv(privateState, privateStateCache, pname, ¶m);
888 }
889
ContextPrivateFogfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfloat * params)890 inline void ContextPrivateFogfv(PrivateState *privateState,
891 PrivateStateCache *privateStateCache,
892 GLenum pname,
893 const GLfloat *params)
894 {
895 SetFogParameters(privateState->getMutableGLES1State(), pname, params);
896 }
897
ContextPrivateFogx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfixed param)898 inline void ContextPrivateFogx(PrivateState *privateState,
899 PrivateStateCache *privateStateCache,
900 GLenum pname,
901 GLfixed param)
902 {
903 if (GetFogParameterCount(pname) == 1)
904 {
905 GLfloat paramf = pname == GL_FOG_MODE ? ConvertToGLenum(param) : ConvertFixedToFloat(param);
906 ContextPrivateFogfv(privateState, privateStateCache, pname, ¶mf);
907 }
908 else
909 {
910 UNREACHABLE();
911 }
912 }
913
ContextPrivateFogxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfixed * params)914 inline void ContextPrivateFogxv(PrivateState *privateState,
915 PrivateStateCache *privateStateCache,
916 GLenum pname,
917 const GLfixed *params)
918 {
919 int paramCount = GetFogParameterCount(pname);
920
921 if (paramCount > 0)
922 {
923 GLfloat paramsf[4];
924 for (int i = 0; i < paramCount; i++)
925 {
926 paramsf[i] =
927 pname == GL_FOG_MODE ? ConvertToGLenum(params[i]) : ConvertFixedToFloat(params[i]);
928 }
929 ContextPrivateFogfv(privateState, privateStateCache, pname, paramsf);
930 }
931 else
932 {
933 UNREACHABLE();
934 }
935 }
936
ContextPrivateFrustumf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat l,GLfloat r,GLfloat b,GLfloat t,GLfloat n,GLfloat f)937 inline void ContextPrivateFrustumf(PrivateState *privateState,
938 PrivateStateCache *privateStateCache,
939 GLfloat l,
940 GLfloat r,
941 GLfloat b,
942 GLfloat t,
943 GLfloat n,
944 GLfloat f)
945 {
946 privateState->getMutableGLES1State()->multMatrix(angle::Mat4::Frustum(l, r, b, t, n, f));
947 }
948
ContextPrivateFrustumx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed l,GLfixed r,GLfixed b,GLfixed t,GLfixed n,GLfixed f)949 inline void ContextPrivateFrustumx(PrivateState *privateState,
950 PrivateStateCache *privateStateCache,
951 GLfixed l,
952 GLfixed r,
953 GLfixed b,
954 GLfixed t,
955 GLfixed n,
956 GLfixed f)
957 {
958 ContextPrivateFrustumf(privateState, privateStateCache, ConvertFixedToFloat(l),
959 ConvertFixedToFloat(r), ConvertFixedToFloat(b), ConvertFixedToFloat(t),
960 ConvertFixedToFloat(n), ConvertFixedToFloat(f));
961 }
962
ContextPrivateGetClipPlanef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum plane,GLfloat * equation)963 inline void ContextPrivateGetClipPlanef(PrivateState *privateState,
964 PrivateStateCache *privateStateCache,
965 GLenum plane,
966 GLfloat *equation)
967 {
968 privateState->gles1().getClipPlane(plane - GL_CLIP_PLANE0, equation);
969 }
970
ContextPrivateGetClipPlanex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum plane,GLfixed * equation)971 inline void ContextPrivateGetClipPlanex(PrivateState *privateState,
972 PrivateStateCache *privateStateCache,
973 GLenum plane,
974 GLfixed *equation)
975 {
976 GLfloat equationf[4] = {};
977
978 ContextPrivateGetClipPlanef(privateState, privateStateCache, plane, equationf);
979
980 for (int i = 0; i < 4; i++)
981 {
982 equation[i] = ConvertFloatToFixed(equationf[i]);
983 }
984 }
985
ContextPrivateGetLightfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfloat * params)986 inline void ContextPrivateGetLightfv(PrivateState *privateState,
987 PrivateStateCache *privateStateCache,
988 GLenum light,
989 LightParameter pname,
990 GLfloat *params)
991 {
992 GetLightParameters(privateState->getMutableGLES1State(), light, pname, params);
993 }
994
ContextPrivateGetLightxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfixed * params)995 inline void ContextPrivateGetLightxv(PrivateState *privateState,
996 PrivateStateCache *privateStateCache,
997 GLenum light,
998 LightParameter pname,
999 GLfixed *params)
1000 {
1001 GLfloat paramsf[4];
1002 ContextPrivateGetLightfv(privateState, privateStateCache, light, pname, paramsf);
1003
1004 for (unsigned int i = 0; i < GetLightParameterCount(pname); i++)
1005 {
1006 params[i] = ConvertFloatToFixed(paramsf[i]);
1007 }
1008 }
1009
ContextPrivateGetMaterialfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfloat * params)1010 inline void ContextPrivateGetMaterialfv(PrivateState *privateState,
1011 PrivateStateCache *privateStateCache,
1012 GLenum face,
1013 MaterialParameter pname,
1014 GLfloat *params)
1015 {
1016 GetMaterialParameters(privateState->getMutableGLES1State(), face, pname, params);
1017 }
1018
ContextPrivateGetMaterialxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfixed * params)1019 inline void ContextPrivateGetMaterialxv(PrivateState *privateState,
1020 PrivateStateCache *privateStateCache,
1021 GLenum face,
1022 MaterialParameter pname,
1023 GLfixed *params)
1024 {
1025 GLfloat paramsf[4];
1026 ContextPrivateGetMaterialfv(privateState, privateStateCache, face, pname, paramsf);
1027
1028 for (unsigned int i = 0; i < GetMaterialParameterCount(pname); i++)
1029 {
1030 params[i] = ConvertFloatToFixed(paramsf[i]);
1031 }
1032 }
1033
ContextPrivateGetTexEnvfv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfloat * params)1034 inline void ContextPrivateGetTexEnvfv(PrivateState *privateState,
1035 PrivateStateCache *privateStateCache,
1036 TextureEnvTarget target,
1037 TextureEnvParameter pname,
1038 GLfloat *params)
1039 {
1040 GetTextureEnv(privateState->getActiveSampler(), privateState->getMutableGLES1State(), target,
1041 pname, params);
1042 }
1043
ContextPrivateGetTexEnviv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLint * params)1044 inline void ContextPrivateGetTexEnviv(PrivateState *privateState,
1045 PrivateStateCache *privateStateCache,
1046 TextureEnvTarget target,
1047 TextureEnvParameter pname,
1048 GLint *params)
1049 {
1050 GLfloat paramsf[4];
1051 ContextPrivateGetTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1052 ConvertTextureEnvToInt(pname, paramsf, params);
1053 }
1054
ContextPrivateGetTexEnvxv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfixed * params)1055 inline void ContextPrivateGetTexEnvxv(PrivateState *privateState,
1056 PrivateStateCache *privateStateCache,
1057 TextureEnvTarget target,
1058 TextureEnvParameter pname,
1059 GLfixed *params)
1060 {
1061 GLfloat paramsf[4];
1062 ContextPrivateGetTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1063 ConvertTextureEnvToFixed(pname, paramsf, params);
1064 }
1065
ContextPrivateLightModelf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfloat param)1066 inline void ContextPrivateLightModelf(PrivateState *privateState,
1067 PrivateStateCache *privateStateCache,
1068 GLenum pname,
1069 GLfloat param)
1070 {
1071 ContextPrivateLightModelfv(privateState, privateStateCache, pname, ¶m);
1072 }
1073
ContextPrivateLightModelfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfloat * params)1074 inline void ContextPrivateLightModelfv(PrivateState *privateState,
1075 PrivateStateCache *privateStateCache,
1076 GLenum pname,
1077 const GLfloat *params)
1078 {
1079 SetLightModelParameters(privateState->getMutableGLES1State(), pname, params);
1080 }
1081
ContextPrivateLightModelx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,GLfixed param)1082 inline void ContextPrivateLightModelx(PrivateState *privateState,
1083 PrivateStateCache *privateStateCache,
1084 GLenum pname,
1085 GLfixed param)
1086 {
1087 ContextPrivateLightModelf(privateState, privateStateCache, pname, ConvertFixedToFloat(param));
1088 }
1089
ContextPrivateLightModelxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum pname,const GLfixed * param)1090 inline void ContextPrivateLightModelxv(PrivateState *privateState,
1091 PrivateStateCache *privateStateCache,
1092 GLenum pname,
1093 const GLfixed *param)
1094 {
1095 GLfloat paramsf[4];
1096
1097 for (unsigned int i = 0; i < GetLightModelParameterCount(pname); i++)
1098 {
1099 paramsf[i] = ConvertFixedToFloat(param[i]);
1100 }
1101
1102 ContextPrivateLightModelfv(privateState, privateStateCache, pname, paramsf);
1103 }
1104
ContextPrivateLightf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfloat param)1105 inline void ContextPrivateLightf(PrivateState *privateState,
1106 PrivateStateCache *privateStateCache,
1107 GLenum light,
1108 LightParameter pname,
1109 GLfloat param)
1110 {
1111 ContextPrivateLightfv(privateState, privateStateCache, light, pname, ¶m);
1112 }
1113
ContextPrivateLightfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,const GLfloat * params)1114 inline void ContextPrivateLightfv(PrivateState *privateState,
1115 PrivateStateCache *privateStateCache,
1116 GLenum light,
1117 LightParameter pname,
1118 const GLfloat *params)
1119 {
1120 SetLightParameters(privateState->getMutableGLES1State(), light, pname, params);
1121 }
1122
ContextPrivateLightx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,GLfixed param)1123 inline void ContextPrivateLightx(PrivateState *privateState,
1124 PrivateStateCache *privateStateCache,
1125 GLenum light,
1126 LightParameter pname,
1127 GLfixed param)
1128 {
1129 ContextPrivateLightf(privateState, privateStateCache, light, pname, ConvertFixedToFloat(param));
1130 }
1131
ContextPrivateLightxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum light,LightParameter pname,const GLfixed * params)1132 inline void ContextPrivateLightxv(PrivateState *privateState,
1133 PrivateStateCache *privateStateCache,
1134 GLenum light,
1135 LightParameter pname,
1136 const GLfixed *params)
1137 {
1138 GLfloat paramsf[4];
1139
1140 for (unsigned int i = 0; i < GetLightParameterCount(pname); i++)
1141 {
1142 paramsf[i] = ConvertFixedToFloat(params[i]);
1143 }
1144
1145 ContextPrivateLightfv(privateState, privateStateCache, light, pname, paramsf);
1146 }
1147
ContextPrivateLoadIdentity(PrivateState * privateState,PrivateStateCache * privateStateCache)1148 inline void ContextPrivateLoadIdentity(PrivateState *privateState,
1149 PrivateStateCache *privateStateCache)
1150 {
1151 privateState->getMutableGLES1State()->loadMatrix(angle::Mat4());
1152 }
1153
ContextPrivateLoadMatrixf(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfloat * m)1154 inline void ContextPrivateLoadMatrixf(PrivateState *privateState,
1155 PrivateStateCache *privateStateCache,
1156 const GLfloat *m)
1157 {
1158 privateState->getMutableGLES1State()->loadMatrix(angle::Mat4(m));
1159 }
1160
ContextPrivateLoadMatrixx(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfixed * m)1161 inline void ContextPrivateLoadMatrixx(PrivateState *privateState,
1162 PrivateStateCache *privateStateCache,
1163 const GLfixed *m)
1164 {
1165 privateState->getMutableGLES1State()->loadMatrix(FixedMatrixToMat4(m));
1166 }
1167
ContextPrivateMaterialf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfloat param)1168 inline void ContextPrivateMaterialf(PrivateState *privateState,
1169 PrivateStateCache *privateStateCache,
1170 GLenum face,
1171 MaterialParameter pname,
1172 GLfloat param)
1173 {
1174 ContextPrivateMaterialfv(privateState, privateStateCache, face, pname, ¶m);
1175 }
1176
ContextPrivateMaterialfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,const GLfloat * params)1177 inline void ContextPrivateMaterialfv(PrivateState *privateState,
1178 PrivateStateCache *privateStateCache,
1179 GLenum face,
1180 MaterialParameter pname,
1181 const GLfloat *params)
1182 {
1183 SetMaterialParameters(privateState->getMutableGLES1State(), face, pname, params);
1184 }
1185
ContextPrivateMaterialx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfixed param)1186 inline void ContextPrivateMaterialx(PrivateState *privateState,
1187 PrivateStateCache *privateStateCache,
1188 GLenum face,
1189 MaterialParameter pname,
1190 GLfixed param)
1191 {
1192 ContextPrivateMaterialf(privateState, privateStateCache, face, pname,
1193 ConvertFixedToFloat(param));
1194 }
1195
ContextPrivateMaterialxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,const GLfixed * param)1196 inline void ContextPrivateMaterialxv(PrivateState *privateState,
1197 PrivateStateCache *privateStateCache,
1198 GLenum face,
1199 MaterialParameter pname,
1200 const GLfixed *param)
1201 {
1202 GLfloat paramsf[4];
1203
1204 for (unsigned int i = 0; i < GetMaterialParameterCount(pname); i++)
1205 {
1206 paramsf[i] = ConvertFixedToFloat(param[i]);
1207 }
1208
1209 ContextPrivateMaterialfv(privateState, privateStateCache, face, pname, paramsf);
1210 }
1211
ContextPrivateMatrixMode(PrivateState * privateState,PrivateStateCache * privateStateCache,MatrixType mode)1212 inline void ContextPrivateMatrixMode(PrivateState *privateState,
1213 PrivateStateCache *privateStateCache,
1214 MatrixType mode)
1215 {
1216 privateState->getMutableGLES1State()->setMatrixMode(mode);
1217 }
1218
ContextPrivateMultMatrixf(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfloat * m)1219 inline void ContextPrivateMultMatrixf(PrivateState *privateState,
1220 PrivateStateCache *privateStateCache,
1221 const GLfloat *m)
1222 {
1223 privateState->getMutableGLES1State()->multMatrix(angle::Mat4(m));
1224 }
1225
ContextPrivateMultMatrixx(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfixed * m)1226 inline void ContextPrivateMultMatrixx(PrivateState *privateState,
1227 PrivateStateCache *privateStateCache,
1228 const GLfixed *m)
1229 {
1230 privateState->getMutableGLES1State()->multMatrix(FixedMatrixToMat4(m));
1231 }
1232
ContextPrivateMultiTexCoord4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)1233 inline void ContextPrivateMultiTexCoord4f(PrivateState *privateState,
1234 PrivateStateCache *privateStateCache,
1235 GLenum target,
1236 GLfloat s,
1237 GLfloat t,
1238 GLfloat r,
1239 GLfloat q)
1240 {
1241 unsigned int unit = target - GL_TEXTURE0;
1242 ASSERT(target >= GL_TEXTURE0 && unit < privateState->getCaps().maxMultitextureUnits);
1243 privateState->getMutableGLES1State()->setCurrentTextureCoords(unit, {s, t, r, q});
1244 }
1245
ContextPrivateMultiTexCoord4x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum texture,GLfixed s,GLfixed t,GLfixed r,GLfixed q)1246 inline void ContextPrivateMultiTexCoord4x(PrivateState *privateState,
1247 PrivateStateCache *privateStateCache,
1248 GLenum texture,
1249 GLfixed s,
1250 GLfixed t,
1251 GLfixed r,
1252 GLfixed q)
1253 {
1254 ContextPrivateMultiTexCoord4f(privateState, privateStateCache, texture, ConvertFixedToFloat(s),
1255 ConvertFixedToFloat(t), ConvertFixedToFloat(r),
1256 ConvertFixedToFloat(q));
1257 }
1258
ContextPrivateNormal3f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat nx,GLfloat ny,GLfloat nz)1259 inline void ContextPrivateNormal3f(PrivateState *privateState,
1260 PrivateStateCache *privateStateCache,
1261 GLfloat nx,
1262 GLfloat ny,
1263 GLfloat nz)
1264 {
1265 privateState->getMutableGLES1State()->setCurrentNormal({nx, ny, nz});
1266 }
1267
ContextPrivateNormal3x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed nx,GLfixed ny,GLfixed nz)1268 inline void ContextPrivateNormal3x(PrivateState *privateState,
1269 PrivateStateCache *privateStateCache,
1270 GLfixed nx,
1271 GLfixed ny,
1272 GLfixed nz)
1273 {
1274 ContextPrivateNormal3f(privateState, privateStateCache, ConvertFixedToFloat(nx),
1275 ConvertFixedToFloat(ny), ConvertFixedToFloat(nz));
1276 }
1277
ContextPrivateOrthof(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)1278 inline void ContextPrivateOrthof(PrivateState *privateState,
1279 PrivateStateCache *privateStateCache,
1280 GLfloat left,
1281 GLfloat right,
1282 GLfloat bottom,
1283 GLfloat top,
1284 GLfloat zNear,
1285 GLfloat zFar)
1286 {
1287 privateState->getMutableGLES1State()->multMatrix(
1288 angle::Mat4::Ortho(left, right, bottom, top, zNear, zFar));
1289 }
1290
ContextPrivateOrthox(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)1291 inline void ContextPrivateOrthox(PrivateState *privateState,
1292 PrivateStateCache *privateStateCache,
1293 GLfixed left,
1294 GLfixed right,
1295 GLfixed bottom,
1296 GLfixed top,
1297 GLfixed zNear,
1298 GLfixed zFar)
1299 {
1300 ContextPrivateOrthof(privateState, privateStateCache, ConvertFixedToFloat(left),
1301 ConvertFixedToFloat(right), ConvertFixedToFloat(bottom),
1302 ConvertFixedToFloat(top), ConvertFixedToFloat(zNear),
1303 ConvertFixedToFloat(zFar));
1304 }
1305
ContextPrivatePointParameterf(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,GLfloat param)1306 inline void ContextPrivatePointParameterf(PrivateState *privateState,
1307 PrivateStateCache *privateStateCache,
1308 PointParameter pname,
1309 GLfloat param)
1310 {
1311 ContextPrivatePointParameterfv(privateState, privateStateCache, pname, ¶m);
1312 }
1313
ContextPrivatePointParameterfv(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,const GLfloat * params)1314 inline void ContextPrivatePointParameterfv(PrivateState *privateState,
1315 PrivateStateCache *privateStateCache,
1316 PointParameter pname,
1317 const GLfloat *params)
1318 {
1319 SetPointParameter(privateState->getMutableGLES1State(), pname, params);
1320 }
1321
ContextPrivatePointParameterx(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,GLfixed param)1322 inline void ContextPrivatePointParameterx(PrivateState *privateState,
1323 PrivateStateCache *privateStateCache,
1324 PointParameter pname,
1325 GLfixed param)
1326 {
1327 ContextPrivatePointParameterf(privateState, privateStateCache, pname,
1328 ConvertFixedToFloat(param));
1329 }
1330
ContextPrivatePointParameterxv(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,const GLfixed * params)1331 inline void ContextPrivatePointParameterxv(PrivateState *privateState,
1332 PrivateStateCache *privateStateCache,
1333 PointParameter pname,
1334 const GLfixed *params)
1335 {
1336 GLfloat paramsf[4] = {};
1337 for (unsigned int i = 0; i < GetPointParameterCount(pname); i++)
1338 {
1339 paramsf[i] = ConvertFixedToFloat(params[i]);
1340 }
1341 ContextPrivatePointParameterfv(privateState, privateStateCache, pname, paramsf);
1342 }
1343
ContextPrivatePointSize(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat size)1344 inline void ContextPrivatePointSize(PrivateState *privateState,
1345 PrivateStateCache *privateStateCache,
1346 GLfloat size)
1347 {
1348 SetPointSize(privateState->getMutableGLES1State(), size);
1349 }
1350
ContextPrivatePointSizex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed size)1351 inline void ContextPrivatePointSizex(PrivateState *privateState,
1352 PrivateStateCache *privateStateCache,
1353 GLfixed size)
1354 {
1355 ContextPrivatePointSize(privateState, privateStateCache, ConvertFixedToFloat(size));
1356 }
1357
ContextPrivatePopMatrix(PrivateState * privateState,PrivateStateCache * privateStateCache)1358 inline void ContextPrivatePopMatrix(PrivateState *privateState,
1359 PrivateStateCache *privateStateCache)
1360 {
1361 privateState->getMutableGLES1State()->popMatrix();
1362 }
1363
ContextPrivatePushMatrix(PrivateState * privateState,PrivateStateCache * privateStateCache)1364 inline void ContextPrivatePushMatrix(PrivateState *privateState,
1365 PrivateStateCache *privateStateCache)
1366 {
1367 privateState->getMutableGLES1State()->pushMatrix();
1368 }
1369
ContextPrivateRotatef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat angle,GLfloat x,GLfloat y,GLfloat z)1370 inline void ContextPrivateRotatef(PrivateState *privateState,
1371 PrivateStateCache *privateStateCache,
1372 GLfloat angle,
1373 GLfloat x,
1374 GLfloat y,
1375 GLfloat z)
1376 {
1377 privateState->getMutableGLES1State()->multMatrix(
1378 angle::Mat4::Rotate(angle, angle::Vector3(x, y, z)));
1379 }
1380
ContextPrivateRotatex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed angle,GLfixed x,GLfixed y,GLfixed z)1381 inline void ContextPrivateRotatex(PrivateState *privateState,
1382 PrivateStateCache *privateStateCache,
1383 GLfixed angle,
1384 GLfixed x,
1385 GLfixed y,
1386 GLfixed z)
1387 {
1388 ContextPrivateRotatef(privateState, privateStateCache, ConvertFixedToFloat(angle),
1389 ConvertFixedToFloat(x), ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1390 }
1391
ContextPrivateScalef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat x,GLfloat y,GLfloat z)1392 inline void ContextPrivateScalef(PrivateState *privateState,
1393 PrivateStateCache *privateStateCache,
1394 GLfloat x,
1395 GLfloat y,
1396 GLfloat z)
1397 {
1398 privateState->getMutableGLES1State()->multMatrix(angle::Mat4::Scale(angle::Vector3(x, y, z)));
1399 }
1400
ContextPrivateScalex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed x,GLfixed y,GLfixed z)1401 inline void ContextPrivateScalex(PrivateState *privateState,
1402 PrivateStateCache *privateStateCache,
1403 GLfixed x,
1404 GLfixed y,
1405 GLfixed z)
1406 {
1407 ContextPrivateScalef(privateState, privateStateCache, ConvertFixedToFloat(x),
1408 ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1409 }
1410
ContextPrivateShadeModel(PrivateState * privateState,PrivateStateCache * privateStateCache,ShadingModel model)1411 inline void ContextPrivateShadeModel(PrivateState *privateState,
1412 PrivateStateCache *privateStateCache,
1413 ShadingModel model)
1414 {
1415 privateState->getMutableGLES1State()->setShadeModel(model);
1416 }
1417
ContextPrivateTexEnvf(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfloat param)1418 inline void ContextPrivateTexEnvf(PrivateState *privateState,
1419 PrivateStateCache *privateStateCache,
1420 TextureEnvTarget target,
1421 TextureEnvParameter pname,
1422 GLfloat param)
1423 {
1424 ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, ¶m);
1425 }
1426
ContextPrivateTexEnvfv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLfloat * params)1427 inline void ContextPrivateTexEnvfv(PrivateState *privateState,
1428 PrivateStateCache *privateStateCache,
1429 TextureEnvTarget target,
1430 TextureEnvParameter pname,
1431 const GLfloat *params)
1432 {
1433 SetTextureEnv(privateState->getActiveSampler(), privateState->getMutableGLES1State(), target,
1434 pname, params);
1435 }
1436
ContextPrivateTexEnvi(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLint param)1437 inline void ContextPrivateTexEnvi(PrivateState *privateState,
1438 PrivateStateCache *privateStateCache,
1439 TextureEnvTarget target,
1440 TextureEnvParameter pname,
1441 GLint param)
1442 {
1443 ContextPrivateTexEnviv(privateState, privateStateCache, target, pname, ¶m);
1444 }
1445
ContextPrivateTexEnviv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLint * params)1446 inline void ContextPrivateTexEnviv(PrivateState *privateState,
1447 PrivateStateCache *privateStateCache,
1448 TextureEnvTarget target,
1449 TextureEnvParameter pname,
1450 const GLint *params)
1451 {
1452 GLfloat paramsf[4] = {};
1453 ConvertTextureEnvFromInt(pname, params, paramsf);
1454 ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1455 }
1456
ContextPrivateTexEnvx(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfixed param)1457 inline void ContextPrivateTexEnvx(PrivateState *privateState,
1458 PrivateStateCache *privateStateCache,
1459 TextureEnvTarget target,
1460 TextureEnvParameter pname,
1461 GLfixed param)
1462 {
1463 ContextPrivateTexEnvxv(privateState, privateStateCache, target, pname, ¶m);
1464 }
1465
ContextPrivateTexEnvxv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLfixed * params)1466 inline void ContextPrivateTexEnvxv(PrivateState *privateState,
1467 PrivateStateCache *privateStateCache,
1468 TextureEnvTarget target,
1469 TextureEnvParameter pname,
1470 const GLfixed *params)
1471 {
1472 GLfloat paramsf[4] = {};
1473 ConvertTextureEnvFromFixed(pname, params, paramsf);
1474 ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1475 }
1476
ContextPrivateTranslatef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat x,GLfloat y,GLfloat z)1477 inline void ContextPrivateTranslatef(PrivateState *privateState,
1478 PrivateStateCache *privateStateCache,
1479 GLfloat x,
1480 GLfloat y,
1481 GLfloat z)
1482 {
1483 privateState->getMutableGLES1State()->multMatrix(
1484 angle::Mat4::Translate(angle::Vector3(x, y, z)));
1485 }
1486
ContextPrivateTranslatex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed x,GLfixed y,GLfixed z)1487 inline void ContextPrivateTranslatex(PrivateState *privateState,
1488 PrivateStateCache *privateStateCache,
1489 GLfixed x,
1490 GLfixed y,
1491 GLfixed z)
1492 {
1493 ContextPrivateTranslatef(privateState, privateStateCache, ConvertFixedToFloat(x),
1494 ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1495 }
1496 } // namespace gl
1497