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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 void ContextPrivateLoadIdentity(PrivateState *privateState, PrivateStateCache *privateStateCache)
1149 {
1150 privateState->getMutableGLES1State()->loadMatrix(angle::Mat4());
1151 }
1152
ContextPrivateLoadMatrixf(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfloat * m)1153 void ContextPrivateLoadMatrixf(PrivateState *privateState,
1154 PrivateStateCache *privateStateCache,
1155 const GLfloat *m)
1156 {
1157 privateState->getMutableGLES1State()->loadMatrix(angle::Mat4(m));
1158 }
1159
ContextPrivateLoadMatrixx(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfixed * m)1160 void ContextPrivateLoadMatrixx(PrivateState *privateState,
1161 PrivateStateCache *privateStateCache,
1162 const GLfixed *m)
1163 {
1164 privateState->getMutableGLES1State()->loadMatrix(FixedMatrixToMat4(m));
1165 }
1166
ContextPrivateMaterialf(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfloat param)1167 void ContextPrivateMaterialf(PrivateState *privateState,
1168 PrivateStateCache *privateStateCache,
1169 GLenum face,
1170 MaterialParameter pname,
1171 GLfloat param)
1172 {
1173 ContextPrivateMaterialfv(privateState, privateStateCache, face, pname, ¶m);
1174 }
1175
ContextPrivateMaterialfv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,const GLfloat * params)1176 void ContextPrivateMaterialfv(PrivateState *privateState,
1177 PrivateStateCache *privateStateCache,
1178 GLenum face,
1179 MaterialParameter pname,
1180 const GLfloat *params)
1181 {
1182 SetMaterialParameters(privateState->getMutableGLES1State(), face, pname, params);
1183 }
1184
ContextPrivateMaterialx(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,GLfixed param)1185 void ContextPrivateMaterialx(PrivateState *privateState,
1186 PrivateStateCache *privateStateCache,
1187 GLenum face,
1188 MaterialParameter pname,
1189 GLfixed param)
1190 {
1191 ContextPrivateMaterialf(privateState, privateStateCache, face, pname,
1192 ConvertFixedToFloat(param));
1193 }
1194
ContextPrivateMaterialxv(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum face,MaterialParameter pname,const GLfixed * param)1195 void ContextPrivateMaterialxv(PrivateState *privateState,
1196 PrivateStateCache *privateStateCache,
1197 GLenum face,
1198 MaterialParameter pname,
1199 const GLfixed *param)
1200 {
1201 GLfloat paramsf[4];
1202
1203 for (unsigned int i = 0; i < GetMaterialParameterCount(pname); i++)
1204 {
1205 paramsf[i] = ConvertFixedToFloat(param[i]);
1206 }
1207
1208 ContextPrivateMaterialfv(privateState, privateStateCache, face, pname, paramsf);
1209 }
1210
ContextPrivateMatrixMode(PrivateState * privateState,PrivateStateCache * privateStateCache,MatrixType mode)1211 void ContextPrivateMatrixMode(PrivateState *privateState,
1212 PrivateStateCache *privateStateCache,
1213 MatrixType mode)
1214 {
1215 privateState->getMutableGLES1State()->setMatrixMode(mode);
1216 }
1217
ContextPrivateMultMatrixf(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfloat * m)1218 void ContextPrivateMultMatrixf(PrivateState *privateState,
1219 PrivateStateCache *privateStateCache,
1220 const GLfloat *m)
1221 {
1222 privateState->getMutableGLES1State()->multMatrix(angle::Mat4(m));
1223 }
1224
ContextPrivateMultMatrixx(PrivateState * privateState,PrivateStateCache * privateStateCache,const GLfixed * m)1225 void ContextPrivateMultMatrixx(PrivateState *privateState,
1226 PrivateStateCache *privateStateCache,
1227 const GLfixed *m)
1228 {
1229 privateState->getMutableGLES1State()->multMatrix(FixedMatrixToMat4(m));
1230 }
1231
ContextPrivateMultiTexCoord4f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)1232 void ContextPrivateMultiTexCoord4f(PrivateState *privateState,
1233 PrivateStateCache *privateStateCache,
1234 GLenum target,
1235 GLfloat s,
1236 GLfloat t,
1237 GLfloat r,
1238 GLfloat q)
1239 {
1240 unsigned int unit = target - GL_TEXTURE0;
1241 ASSERT(target >= GL_TEXTURE0 && unit < privateState->getCaps().maxMultitextureUnits);
1242 privateState->getMutableGLES1State()->setCurrentTextureCoords(unit, {s, t, r, q});
1243 }
1244
ContextPrivateMultiTexCoord4x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLenum texture,GLfixed s,GLfixed t,GLfixed r,GLfixed q)1245 void ContextPrivateMultiTexCoord4x(PrivateState *privateState,
1246 PrivateStateCache *privateStateCache,
1247 GLenum texture,
1248 GLfixed s,
1249 GLfixed t,
1250 GLfixed r,
1251 GLfixed q)
1252 {
1253 ContextPrivateMultiTexCoord4f(privateState, privateStateCache, texture, ConvertFixedToFloat(s),
1254 ConvertFixedToFloat(t), ConvertFixedToFloat(r),
1255 ConvertFixedToFloat(q));
1256 }
1257
ContextPrivateNormal3f(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat nx,GLfloat ny,GLfloat nz)1258 void ContextPrivateNormal3f(PrivateState *privateState,
1259 PrivateStateCache *privateStateCache,
1260 GLfloat nx,
1261 GLfloat ny,
1262 GLfloat nz)
1263 {
1264 privateState->getMutableGLES1State()->setCurrentNormal({nx, ny, nz});
1265 }
1266
ContextPrivateNormal3x(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed nx,GLfixed ny,GLfixed nz)1267 void ContextPrivateNormal3x(PrivateState *privateState,
1268 PrivateStateCache *privateStateCache,
1269 GLfixed nx,
1270 GLfixed ny,
1271 GLfixed nz)
1272 {
1273 ContextPrivateNormal3f(privateState, privateStateCache, ConvertFixedToFloat(nx),
1274 ConvertFixedToFloat(ny), ConvertFixedToFloat(nz));
1275 }
1276
ContextPrivateOrthof(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat left,GLfloat right,GLfloat bottom,GLfloat top,GLfloat zNear,GLfloat zFar)1277 void ContextPrivateOrthof(PrivateState *privateState,
1278 PrivateStateCache *privateStateCache,
1279 GLfloat left,
1280 GLfloat right,
1281 GLfloat bottom,
1282 GLfloat top,
1283 GLfloat zNear,
1284 GLfloat zFar)
1285 {
1286 privateState->getMutableGLES1State()->multMatrix(
1287 angle::Mat4::Ortho(left, right, bottom, top, zNear, zFar));
1288 }
1289
ContextPrivateOrthox(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed left,GLfixed right,GLfixed bottom,GLfixed top,GLfixed zNear,GLfixed zFar)1290 void ContextPrivateOrthox(PrivateState *privateState,
1291 PrivateStateCache *privateStateCache,
1292 GLfixed left,
1293 GLfixed right,
1294 GLfixed bottom,
1295 GLfixed top,
1296 GLfixed zNear,
1297 GLfixed zFar)
1298 {
1299 ContextPrivateOrthof(privateState, privateStateCache, ConvertFixedToFloat(left),
1300 ConvertFixedToFloat(right), ConvertFixedToFloat(bottom),
1301 ConvertFixedToFloat(top), ConvertFixedToFloat(zNear),
1302 ConvertFixedToFloat(zFar));
1303 }
1304
ContextPrivatePointParameterf(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,GLfloat param)1305 void ContextPrivatePointParameterf(PrivateState *privateState,
1306 PrivateStateCache *privateStateCache,
1307 PointParameter pname,
1308 GLfloat param)
1309 {
1310 ContextPrivatePointParameterfv(privateState, privateStateCache, pname, ¶m);
1311 }
1312
ContextPrivatePointParameterfv(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,const GLfloat * params)1313 void ContextPrivatePointParameterfv(PrivateState *privateState,
1314 PrivateStateCache *privateStateCache,
1315 PointParameter pname,
1316 const GLfloat *params)
1317 {
1318 SetPointParameter(privateState->getMutableGLES1State(), pname, params);
1319 }
1320
ContextPrivatePointParameterx(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,GLfixed param)1321 void ContextPrivatePointParameterx(PrivateState *privateState,
1322 PrivateStateCache *privateStateCache,
1323 PointParameter pname,
1324 GLfixed param)
1325 {
1326 ContextPrivatePointParameterf(privateState, privateStateCache, pname,
1327 ConvertFixedToFloat(param));
1328 }
1329
ContextPrivatePointParameterxv(PrivateState * privateState,PrivateStateCache * privateStateCache,PointParameter pname,const GLfixed * params)1330 void ContextPrivatePointParameterxv(PrivateState *privateState,
1331 PrivateStateCache *privateStateCache,
1332 PointParameter pname,
1333 const GLfixed *params)
1334 {
1335 GLfloat paramsf[4] = {};
1336 for (unsigned int i = 0; i < GetPointParameterCount(pname); i++)
1337 {
1338 paramsf[i] = ConvertFixedToFloat(params[i]);
1339 }
1340 ContextPrivatePointParameterfv(privateState, privateStateCache, pname, paramsf);
1341 }
1342
ContextPrivatePointSize(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat size)1343 void ContextPrivatePointSize(PrivateState *privateState,
1344 PrivateStateCache *privateStateCache,
1345 GLfloat size)
1346 {
1347 SetPointSize(privateState->getMutableGLES1State(), size);
1348 }
1349
ContextPrivatePointSizex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed size)1350 void ContextPrivatePointSizex(PrivateState *privateState,
1351 PrivateStateCache *privateStateCache,
1352 GLfixed size)
1353 {
1354 ContextPrivatePointSize(privateState, privateStateCache, ConvertFixedToFloat(size));
1355 }
1356
ContextPrivatePopMatrix(PrivateState * privateState,PrivateStateCache * privateStateCache)1357 void ContextPrivatePopMatrix(PrivateState *privateState, PrivateStateCache *privateStateCache)
1358 {
1359 privateState->getMutableGLES1State()->popMatrix();
1360 }
1361
ContextPrivatePushMatrix(PrivateState * privateState,PrivateStateCache * privateStateCache)1362 void ContextPrivatePushMatrix(PrivateState *privateState, PrivateStateCache *privateStateCache)
1363 {
1364 privateState->getMutableGLES1State()->pushMatrix();
1365 }
1366
ContextPrivateRotatef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat angle,GLfloat x,GLfloat y,GLfloat z)1367 void ContextPrivateRotatef(PrivateState *privateState,
1368 PrivateStateCache *privateStateCache,
1369 GLfloat angle,
1370 GLfloat x,
1371 GLfloat y,
1372 GLfloat z)
1373 {
1374 privateState->getMutableGLES1State()->multMatrix(
1375 angle::Mat4::Rotate(angle, angle::Vector3(x, y, z)));
1376 }
1377
ContextPrivateRotatex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed angle,GLfixed x,GLfixed y,GLfixed z)1378 void ContextPrivateRotatex(PrivateState *privateState,
1379 PrivateStateCache *privateStateCache,
1380 GLfixed angle,
1381 GLfixed x,
1382 GLfixed y,
1383 GLfixed z)
1384 {
1385 ContextPrivateRotatef(privateState, privateStateCache, ConvertFixedToFloat(angle),
1386 ConvertFixedToFloat(x), ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1387 }
1388
ContextPrivateScalef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat x,GLfloat y,GLfloat z)1389 void ContextPrivateScalef(PrivateState *privateState,
1390 PrivateStateCache *privateStateCache,
1391 GLfloat x,
1392 GLfloat y,
1393 GLfloat z)
1394 {
1395 privateState->getMutableGLES1State()->multMatrix(angle::Mat4::Scale(angle::Vector3(x, y, z)));
1396 }
1397
ContextPrivateScalex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed x,GLfixed y,GLfixed z)1398 void ContextPrivateScalex(PrivateState *privateState,
1399 PrivateStateCache *privateStateCache,
1400 GLfixed x,
1401 GLfixed y,
1402 GLfixed z)
1403 {
1404 ContextPrivateScalef(privateState, privateStateCache, ConvertFixedToFloat(x),
1405 ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1406 }
1407
ContextPrivateShadeModel(PrivateState * privateState,PrivateStateCache * privateStateCache,ShadingModel model)1408 void ContextPrivateShadeModel(PrivateState *privateState,
1409 PrivateStateCache *privateStateCache,
1410 ShadingModel model)
1411 {
1412 privateState->getMutableGLES1State()->setShadeModel(model);
1413 }
1414
ContextPrivateTexEnvf(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfloat param)1415 void ContextPrivateTexEnvf(PrivateState *privateState,
1416 PrivateStateCache *privateStateCache,
1417 TextureEnvTarget target,
1418 TextureEnvParameter pname,
1419 GLfloat param)
1420 {
1421 ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, ¶m);
1422 }
1423
ContextPrivateTexEnvfv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLfloat * params)1424 void ContextPrivateTexEnvfv(PrivateState *privateState,
1425 PrivateStateCache *privateStateCache,
1426 TextureEnvTarget target,
1427 TextureEnvParameter pname,
1428 const GLfloat *params)
1429 {
1430 SetTextureEnv(privateState->getActiveSampler(), privateState->getMutableGLES1State(), target,
1431 pname, params);
1432 }
1433
ContextPrivateTexEnvi(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLint param)1434 void ContextPrivateTexEnvi(PrivateState *privateState,
1435 PrivateStateCache *privateStateCache,
1436 TextureEnvTarget target,
1437 TextureEnvParameter pname,
1438 GLint param)
1439 {
1440 ContextPrivateTexEnviv(privateState, privateStateCache, target, pname, ¶m);
1441 }
1442
ContextPrivateTexEnviv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLint * params)1443 void ContextPrivateTexEnviv(PrivateState *privateState,
1444 PrivateStateCache *privateStateCache,
1445 TextureEnvTarget target,
1446 TextureEnvParameter pname,
1447 const GLint *params)
1448 {
1449 GLfloat paramsf[4] = {};
1450 ConvertTextureEnvFromInt(pname, params, paramsf);
1451 ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1452 }
1453
ContextPrivateTexEnvx(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,GLfixed param)1454 void ContextPrivateTexEnvx(PrivateState *privateState,
1455 PrivateStateCache *privateStateCache,
1456 TextureEnvTarget target,
1457 TextureEnvParameter pname,
1458 GLfixed param)
1459 {
1460 ContextPrivateTexEnvxv(privateState, privateStateCache, target, pname, ¶m);
1461 }
1462
ContextPrivateTexEnvxv(PrivateState * privateState,PrivateStateCache * privateStateCache,TextureEnvTarget target,TextureEnvParameter pname,const GLfixed * params)1463 void ContextPrivateTexEnvxv(PrivateState *privateState,
1464 PrivateStateCache *privateStateCache,
1465 TextureEnvTarget target,
1466 TextureEnvParameter pname,
1467 const GLfixed *params)
1468 {
1469 GLfloat paramsf[4] = {};
1470 ConvertTextureEnvFromFixed(pname, params, paramsf);
1471 ContextPrivateTexEnvfv(privateState, privateStateCache, target, pname, paramsf);
1472 }
1473
ContextPrivateTranslatef(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfloat x,GLfloat y,GLfloat z)1474 void ContextPrivateTranslatef(PrivateState *privateState,
1475 PrivateStateCache *privateStateCache,
1476 GLfloat x,
1477 GLfloat y,
1478 GLfloat z)
1479 {
1480 privateState->getMutableGLES1State()->multMatrix(
1481 angle::Mat4::Translate(angle::Vector3(x, y, z)));
1482 }
1483
ContextPrivateTranslatex(PrivateState * privateState,PrivateStateCache * privateStateCache,GLfixed x,GLfixed y,GLfixed z)1484 void ContextPrivateTranslatex(PrivateState *privateState,
1485 PrivateStateCache *privateStateCache,
1486 GLfixed x,
1487 GLfixed y,
1488 GLfixed z)
1489 {
1490 ContextPrivateTranslatef(privateState, privateStateCache, ConvertFixedToFloat(x),
1491 ConvertFixedToFloat(y), ConvertFixedToFloat(z));
1492 }
1493 } // namespace gl
1494