12
12
void crStateBufferInit (CRContext *ctx)
14
CRBufferState *b = &ctx->buffer;
15
CRStateBits *sb = GetCurrentBits();
16
CRBufferBits *bb = &(sb->buffer);
17
GLcolorf zero_colorf = {0.0f, 0.0f, 0.0f, 0.0f};
19
b->depthTest = GL_FALSE;
21
b->alphaTest = GL_FALSE;
23
RESET(bb->enable, ctx->bitid);
25
b->logicOp = GL_FALSE;
26
RESET(bb->logicOp, ctx->bitid);
27
b->indexLogicOp = GL_FALSE;
28
RESET(bb->indexLogicOp, ctx->bitid);
29
b->depthMask = GL_TRUE;
30
RESET(bb->depthMask, ctx->bitid);
32
b->alphaTestFunc = GL_ALWAYS;
34
RESET(bb->alphaFunc, ctx->bitid);
35
b->depthFunc = GL_LESS;
36
RESET(bb->depthFunc, ctx->bitid);
37
b->blendSrcRGB = GL_ONE;
38
b->blendDstRGB = GL_ZERO;
39
RESET(bb->blendFunc, ctx->bitid);
14
CRBufferState *b = &ctx->buffer;
15
CRStateBits *sb = GetCurrentBits();
16
CRBufferBits *bb = &(sb->buffer);
17
GLcolorf zero_colorf = {0.0f, 0.0f, 0.0f, 0.0f};
19
b->depthTest = GL_FALSE;
21
b->alphaTest = GL_FALSE;
23
RESET(bb->enable, ctx->bitid);
25
b->logicOp = GL_FALSE;
26
RESET(bb->logicOp, ctx->bitid);
27
b->indexLogicOp = GL_FALSE;
28
RESET(bb->indexLogicOp, ctx->bitid);
29
b->depthMask = GL_TRUE;
30
RESET(bb->depthMask, ctx->bitid);
32
b->alphaTestFunc = GL_ALWAYS;
34
RESET(bb->alphaFunc, ctx->bitid);
35
b->depthFunc = GL_LESS;
36
RESET(bb->depthFunc, ctx->bitid);
37
b->blendSrcRGB = GL_ONE;
38
b->blendDstRGB = GL_ZERO;
39
RESET(bb->blendFunc, ctx->bitid);
40
40
#ifdef CR_EXT_blend_func_separate
41
b->blendSrcA = GL_ONE;
42
b->blendDstA = GL_ZERO;
43
RESET(bb->blendFuncSeparate, ctx->bitid);
41
b->blendSrcA = GL_ONE;
42
b->blendDstA = GL_ZERO;
43
RESET(bb->blendFuncSeparate, ctx->bitid);
45
b->logicOpMode = GL_COPY;
46
b->drawBuffer = GL_BACK;
47
RESET(bb->drawBuffer, ctx->bitid);
48
b->readBuffer = GL_BACK;
49
RESET(bb->readBuffer, ctx->bitid);
50
b->indexWriteMask = 0xffffffff;
51
RESET(bb->indexMask, ctx->bitid);
52
b->colorWriteMask.r = GL_TRUE;
53
b->colorWriteMask.g = GL_TRUE;
54
b->colorWriteMask.b = GL_TRUE;
55
b->colorWriteMask.a = GL_TRUE;
56
RESET(bb->colorWriteMask, ctx->bitid);
57
b->colorClearValue = zero_colorf;
58
RESET(bb->clearColor, ctx->bitid);
59
b->indexClearValue = 0;
60
RESET(bb->clearIndex, ctx->bitid);
61
b->depthClearValue = (GLdefault) 1.0;
62
RESET(bb->clearDepth, ctx->bitid);
63
b->accumClearValue = zero_colorf;
64
RESET(bb->clearAccum, ctx->bitid);
45
b->logicOpMode = GL_COPY;
46
b->drawBuffer = GL_BACK;
47
RESET(bb->drawBuffer, ctx->bitid);
48
b->readBuffer = GL_BACK;
49
RESET(bb->readBuffer, ctx->bitid);
50
b->indexWriteMask = 0xffffffff;
51
RESET(bb->indexMask, ctx->bitid);
52
b->colorWriteMask.r = GL_TRUE;
53
b->colorWriteMask.g = GL_TRUE;
54
b->colorWriteMask.b = GL_TRUE;
55
b->colorWriteMask.a = GL_TRUE;
56
RESET(bb->colorWriteMask, ctx->bitid);
57
b->colorClearValue = zero_colorf;
58
RESET(bb->clearColor, ctx->bitid);
59
b->indexClearValue = 0;
60
RESET(bb->clearIndex, ctx->bitid);
61
b->depthClearValue = (GLdefault) 1.0;
62
RESET(bb->clearDepth, ctx->bitid);
63
b->accumClearValue = zero_colorf;
64
RESET(bb->clearAccum, ctx->bitid);
66
66
#ifdef CR_EXT_blend_color
67
b->blendColor = zero_colorf;
68
RESET(bb->blendColor, ctx->bitid);
67
b->blendColor = zero_colorf;
68
RESET(bb->blendColor, ctx->bitid);
70
70
#if defined(CR_EXT_blend_minmax) || defined(CR_EXT_blend_subtract) || defined(CR_EXT_blend_logic_op)
71
b->blendEquation = GL_FUNC_ADD_EXT;
72
RESET(bb->blendEquation, ctx->bitid);
71
b->blendEquation = GL_FUNC_ADD_EXT;
72
RESET(bb->blendEquation, ctx->bitid);
75
RESET(bb->dirty, ctx->bitid);
75
RESET(bb->dirty, ctx->bitid);
78
78
void STATE_APIENTRY crStateAlphaFunc (GLenum func, GLclampf ref)
80
CRContext *g = GetCurrentContext();
81
CRBufferState *b = &(g->buffer);
82
CRStateBits *sb = GetCurrentBits();
83
CRBufferBits *bb = &(sb->buffer);
85
if (g->current.inBeginEnd)
87
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glAlphaFunc called in begin/end");
105
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glAlphaFunc: Invalid func: %d", func);
109
if (ref < 0.0f) ref = 0.0f;
110
if (ref > 1.0f) ref = 1.0f;
112
b->alphaTestFunc = func;
113
b->alphaTestRef = ref;
114
DIRTY(bb->dirty, g->neg_bitid);
115
DIRTY(bb->alphaFunc, g->neg_bitid);
80
CRContext *g = GetCurrentContext();
81
CRBufferState *b = &(g->buffer);
82
CRStateBits *sb = GetCurrentBits();
83
CRBufferBits *bb = &(sb->buffer);
85
if (g->current.inBeginEnd)
87
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glAlphaFunc called in begin/end");
105
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glAlphaFunc: Invalid func: %d", func);
109
if (ref < 0.0f) ref = 0.0f;
110
if (ref > 1.0f) ref = 1.0f;
112
b->alphaTestFunc = func;
113
b->alphaTestRef = ref;
114
DIRTY(bb->dirty, g->neg_bitid);
115
DIRTY(bb->alphaFunc, g->neg_bitid);
118
118
void STATE_APIENTRY crStateDepthFunc (GLenum func)
120
CRContext *g = GetCurrentContext();
121
CRBufferState *b = &(g->buffer);
122
CRStateBits *sb = GetCurrentBits();
123
CRBufferBits *bb = &(sb->buffer);
125
if (g->current.inBeginEnd)
127
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glDepthFunc called in begin/end");
145
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glDepthFunc: Invalid func: %d", func);
151
DIRTY(bb->dirty, g->neg_bitid);
152
DIRTY(bb->depthFunc, g->neg_bitid);
120
CRContext *g = GetCurrentContext();
121
CRBufferState *b = &(g->buffer);
122
CRStateBits *sb = GetCurrentBits();
123
CRBufferBits *bb = &(sb->buffer);
125
if (g->current.inBeginEnd)
127
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glDepthFunc called in begin/end");
145
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glDepthFunc: Invalid func: %d", func);
151
DIRTY(bb->dirty, g->neg_bitid);
152
DIRTY(bb->depthFunc, g->neg_bitid);
155
155
void STATE_APIENTRY crStateBlendFunc (GLenum sfactor, GLenum dfactor)
157
CRContext *g = GetCurrentContext();
158
CRBufferState *b = &(g->buffer);
159
CRStateBits *sb = GetCurrentBits();
160
CRBufferBits *bb = &(sb->buffer);
162
if (g->current.inBeginEnd)
164
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glBlendFunc called in begin/end");
175
case GL_ONE_MINUS_DST_COLOR:
177
case GL_ONE_MINUS_SRC_ALPHA:
179
case GL_ONE_MINUS_DST_ALPHA:
180
case GL_SRC_ALPHA_SATURATE:
182
#ifdef CR_EXT_blend_color
183
case GL_CONSTANT_COLOR_EXT:
184
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
185
case GL_CONSTANT_ALPHA_EXT:
186
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
187
if (g->extensions.EXT_blend_color)
191
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid sfactor passed to glBlendFunc: %d", sfactor);
200
case GL_ONE_MINUS_SRC_COLOR:
202
case GL_ONE_MINUS_SRC_ALPHA:
204
case GL_ONE_MINUS_DST_ALPHA:
206
#ifdef CR_EXT_blend_color
207
case GL_CONSTANT_COLOR_EXT:
208
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
209
case GL_CONSTANT_ALPHA_EXT:
210
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
211
if (g->extensions.EXT_blend_color)
215
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid dfactor passed to glBlendFunc: %d", dfactor);
219
b->blendSrcRGB = sfactor;
220
b->blendDstRGB = dfactor;
221
b->blendSrcA = sfactor;
222
b->blendDstA = dfactor;
223
DIRTY(bb->dirty, g->neg_bitid);
224
DIRTY(bb->blendFunc, g->neg_bitid);
157
CRContext *g = GetCurrentContext();
158
CRBufferState *b = &(g->buffer);
159
CRStateBits *sb = GetCurrentBits();
160
CRBufferBits *bb = &(sb->buffer);
162
if (g->current.inBeginEnd)
164
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glBlendFunc called in begin/end");
175
case GL_ONE_MINUS_DST_COLOR:
177
case GL_ONE_MINUS_SRC_ALPHA:
179
case GL_ONE_MINUS_DST_ALPHA:
180
case GL_SRC_ALPHA_SATURATE:
182
#ifdef CR_EXT_blend_color
183
case GL_CONSTANT_COLOR_EXT:
184
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
185
case GL_CONSTANT_ALPHA_EXT:
186
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
187
if (g->extensions.EXT_blend_color)
191
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid sfactor passed to glBlendFunc: %d", sfactor);
200
case GL_ONE_MINUS_SRC_COLOR:
202
case GL_ONE_MINUS_SRC_ALPHA:
204
case GL_ONE_MINUS_DST_ALPHA:
206
#ifdef CR_EXT_blend_color
207
case GL_CONSTANT_COLOR_EXT:
208
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
209
case GL_CONSTANT_ALPHA_EXT:
210
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
211
if (g->extensions.EXT_blend_color)
215
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid dfactor passed to glBlendFunc: %d", dfactor);
219
b->blendSrcRGB = sfactor;
220
b->blendDstRGB = dfactor;
221
b->blendSrcA = sfactor;
222
b->blendDstA = dfactor;
223
DIRTY(bb->dirty, g->neg_bitid);
224
DIRTY(bb->blendFunc, g->neg_bitid);
227
227
void STATE_APIENTRY crStateBlendColorEXT( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
229
CRContext *g = GetCurrentContext();
230
CRBufferState *b = &(g->buffer);
231
CRStateBits *sb = GetCurrentBits();
232
CRBufferBits *bb = &(sb->buffer);
234
if (g->current.inBeginEnd)
236
crStateError( __LINE__, __FILE__, GL_INVALID_OPERATION, "BlendColorEXT called inside a Begin/End" );
240
b->blendColor.r = red;
241
b->blendColor.g = green;
242
b->blendColor.b = blue;
243
b->blendColor.a = alpha;
244
DIRTY(bb->blendColor, g->neg_bitid);
245
DIRTY(bb->dirty, g->neg_bitid);
229
CRContext *g = GetCurrentContext();
230
CRBufferState *b = &(g->buffer);
231
CRStateBits *sb = GetCurrentBits();
232
CRBufferBits *bb = &(sb->buffer);
234
if (g->current.inBeginEnd)
236
crStateError( __LINE__, __FILE__, GL_INVALID_OPERATION, "BlendColorEXT called inside a Begin/End" );
240
b->blendColor.r = red;
241
b->blendColor.g = green;
242
b->blendColor.b = blue;
243
b->blendColor.a = alpha;
244
DIRTY(bb->blendColor, g->neg_bitid);
245
DIRTY(bb->dirty, g->neg_bitid);
248
248
#ifdef CR_EXT_blend_func_separate
249
249
void STATE_APIENTRY crStateBlendFuncSeparateEXT( GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorA, GLenum dfactorA )
251
CRContext *g = GetCurrentContext();
252
CRBufferState *b = &(g->buffer);
253
CRStateBits *sb = GetCurrentBits();
254
CRBufferBits *bb = &(sb->buffer);
256
if (g->current.inBeginEnd)
258
crStateError( __LINE__, __FILE__, GL_INVALID_OPERATION, "BlendFuncSeparateEXT called inside a Begin/End" );
269
case GL_ONE_MINUS_DST_COLOR:
271
case GL_ONE_MINUS_SRC_ALPHA:
273
case GL_ONE_MINUS_DST_ALPHA:
274
case GL_SRC_ALPHA_SATURATE:
276
#ifdef CR_EXT_blend_color
277
case GL_CONSTANT_COLOR_EXT:
278
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
279
case GL_CONSTANT_ALPHA_EXT:
280
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
281
if (g->extensions.EXT_blend_color)
285
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid sfactorRGB passed to glBlendFuncSeparateEXT: %d", sfactorRGB);
294
case GL_ONE_MINUS_DST_COLOR:
296
case GL_ONE_MINUS_SRC_ALPHA:
298
case GL_ONE_MINUS_DST_ALPHA:
299
case GL_SRC_ALPHA_SATURATE:
301
#ifdef CR_EXT_blend_color
302
case GL_CONSTANT_COLOR_EXT:
303
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
304
case GL_CONSTANT_ALPHA_EXT:
305
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
306
if (g->extensions.EXT_blend_color)
310
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid sfactorA passed to glBlendFuncSeparateEXT: %d", sfactorA);
320
case GL_ONE_MINUS_DST_COLOR:
321
case GL_ONE_MINUS_SRC_COLOR:
323
case GL_ONE_MINUS_SRC_ALPHA:
325
case GL_ONE_MINUS_DST_ALPHA:
326
case GL_SRC_ALPHA_SATURATE:
328
#ifdef CR_EXT_blend_color
329
case GL_CONSTANT_COLOR_EXT:
330
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
331
case GL_CONSTANT_ALPHA_EXT:
332
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
333
if (g->extensions.EXT_blend_color)
337
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid dfactorRGB passed to glBlendFuncSeparateEXT: %d", dfactorRGB);
347
case GL_ONE_MINUS_SRC_COLOR:
348
case GL_ONE_MINUS_DST_COLOR:
350
case GL_ONE_MINUS_SRC_ALPHA:
352
case GL_ONE_MINUS_DST_ALPHA:
353
case GL_SRC_ALPHA_SATURATE:
355
#ifdef CR_EXT_blend_color
356
case GL_CONSTANT_COLOR_EXT:
357
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
358
case GL_CONSTANT_ALPHA_EXT:
359
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
360
if (g->extensions.EXT_blend_color)
364
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid dfactorA passed to glBlendFuncSeparateEXT: %d", dfactorA);
368
b->blendSrcRGB = sfactorRGB;
369
b->blendDstRGB = dfactorRGB;
370
b->blendSrcA = sfactorA;
371
b->blendDstA = dfactorA;
372
DIRTY(bb->dirty, g->neg_bitid);
373
DIRTY(bb->blendFuncSeparate, g->neg_bitid);
251
CRContext *g = GetCurrentContext();
252
CRBufferState *b = &(g->buffer);
253
CRStateBits *sb = GetCurrentBits();
254
CRBufferBits *bb = &(sb->buffer);
256
if (g->current.inBeginEnd)
258
crStateError( __LINE__, __FILE__, GL_INVALID_OPERATION, "BlendFuncSeparateEXT called inside a Begin/End" );
269
case GL_ONE_MINUS_DST_COLOR:
271
case GL_ONE_MINUS_SRC_ALPHA:
273
case GL_ONE_MINUS_DST_ALPHA:
274
case GL_SRC_ALPHA_SATURATE:
276
#ifdef CR_EXT_blend_color
277
case GL_CONSTANT_COLOR_EXT:
278
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
279
case GL_CONSTANT_ALPHA_EXT:
280
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
281
if (g->extensions.EXT_blend_color)
285
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid sfactorRGB passed to glBlendFuncSeparateEXT: %d", sfactorRGB);
294
case GL_ONE_MINUS_DST_COLOR:
296
case GL_ONE_MINUS_SRC_ALPHA:
298
case GL_ONE_MINUS_DST_ALPHA:
299
case GL_SRC_ALPHA_SATURATE:
301
#ifdef CR_EXT_blend_color
302
case GL_CONSTANT_COLOR_EXT:
303
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
304
case GL_CONSTANT_ALPHA_EXT:
305
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
306
if (g->extensions.EXT_blend_color)
310
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid sfactorA passed to glBlendFuncSeparateEXT: %d", sfactorA);
320
case GL_ONE_MINUS_DST_COLOR:
321
case GL_ONE_MINUS_SRC_COLOR:
323
case GL_ONE_MINUS_SRC_ALPHA:
325
case GL_ONE_MINUS_DST_ALPHA:
326
case GL_SRC_ALPHA_SATURATE:
328
#ifdef CR_EXT_blend_color
329
case GL_CONSTANT_COLOR_EXT:
330
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
331
case GL_CONSTANT_ALPHA_EXT:
332
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
333
if (g->extensions.EXT_blend_color)
337
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid dfactorRGB passed to glBlendFuncSeparateEXT: %d", dfactorRGB);
347
case GL_ONE_MINUS_SRC_COLOR:
348
case GL_ONE_MINUS_DST_COLOR:
350
case GL_ONE_MINUS_SRC_ALPHA:
352
case GL_ONE_MINUS_DST_ALPHA:
353
case GL_SRC_ALPHA_SATURATE:
355
#ifdef CR_EXT_blend_color
356
case GL_CONSTANT_COLOR_EXT:
357
case GL_ONE_MINUS_CONSTANT_COLOR_EXT:
358
case GL_CONSTANT_ALPHA_EXT:
359
case GL_ONE_MINUS_CONSTANT_ALPHA_EXT:
360
if (g->extensions.EXT_blend_color)
364
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid dfactorA passed to glBlendFuncSeparateEXT: %d", dfactorA);
368
b->blendSrcRGB = sfactorRGB;
369
b->blendDstRGB = dfactorRGB;
370
b->blendSrcA = sfactorA;
371
b->blendDstA = dfactorA;
372
DIRTY(bb->dirty, g->neg_bitid);
373
DIRTY(bb->blendFuncSeparate, g->neg_bitid);
377
377
void STATE_APIENTRY crStateBlendEquationEXT( GLenum mode )
379
CRContext *g = GetCurrentContext();
380
CRBufferState *b = &(g->buffer);
381
CRStateBits *sb = GetCurrentBits();
382
CRBufferBits *bb = &(sb->buffer);
379
CRContext *g = GetCurrentContext();
380
CRBufferState *b = &(g->buffer);
381
CRStateBits *sb = GetCurrentBits();
382
CRBufferBits *bb = &(sb->buffer);
384
if( g->current.inBeginEnd )
386
crStateError( __LINE__, __FILE__, GL_INVALID_OPERATION, "BlendEquationEXT called inside a Begin/End" );
384
if( g->current.inBeginEnd )
386
crStateError( __LINE__, __FILE__, GL_INVALID_OPERATION, "BlendEquationEXT called inside a Begin/End" );
391
391
#if defined(CR_EXT_blend_minmax) || defined(CR_EXT_blend_subtract) || defined(CR_EXT_blend_logic_op)
392
case GL_FUNC_ADD_EXT:
392
case GL_FUNC_ADD_EXT:
393
393
#ifdef CR_EXT_blend_subtract
394
case GL_FUNC_SUBTRACT_EXT:
395
case GL_FUNC_REVERSE_SUBTRACT_EXT:
394
case GL_FUNC_SUBTRACT_EXT:
395
case GL_FUNC_REVERSE_SUBTRACT_EXT:
396
396
#endif /* CR_EXT_blend_subtract */
397
397
#ifdef CR_EXT_blend_minmax
400
400
#endif /* CR_EXT_blend_minmax */
401
401
#ifdef CR_EXT_blend_logic_op
403
403
#endif /* CR_EXT_blend_logic_op */
404
b->blendEquation = mode;
404
b->blendEquation = mode;
406
406
#endif /* defined(CR_EXT_blend_minmax) || defined(CR_EXT_blend_subtract) || defined(CR_EXT_blend_logic_op) */
408
crStateError( __LINE__, __FILE__, GL_INVALID_ENUM,
409
"BlendEquationEXT: mode called with illegal parameter: 0x%x", (GLenum) mode );
412
DIRTY(bb->blendEquation, g->neg_bitid);
413
DIRTY(bb->dirty, g->neg_bitid);
408
crStateError( __LINE__, __FILE__, GL_INVALID_ENUM,
409
"BlendEquationEXT: mode called with illegal parameter: 0x%x", (GLenum) mode );
412
DIRTY(bb->blendEquation, g->neg_bitid);
413
DIRTY(bb->dirty, g->neg_bitid);
416
416
void STATE_APIENTRY crStateLogicOp (GLenum opcode)
418
CRContext *g = GetCurrentContext();
419
CRBufferState *b = &(g->buffer);
420
CRStateBits *sb = GetCurrentBits();
421
CRBufferBits *bb = &(sb->buffer);
423
if (g->current.inBeginEnd)
425
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glLogicOp called in begin/end");
436
case GL_COPY_INVERTED:
446
case GL_AND_INVERTED:
451
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glLogicOp called with bogus opcode: %d", opcode);
455
b->logicOpMode = opcode;
456
DIRTY(bb->dirty, g->neg_bitid);
457
DIRTY(bb->logicOp, g->neg_bitid);
458
DIRTY(bb->indexLogicOp, g->neg_bitid);
418
CRContext *g = GetCurrentContext();
419
CRBufferState *b = &(g->buffer);
420
CRStateBits *sb = GetCurrentBits();
421
CRBufferBits *bb = &(sb->buffer);
423
if (g->current.inBeginEnd)
425
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glLogicOp called in begin/end");
436
case GL_COPY_INVERTED:
446
case GL_AND_INVERTED:
451
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glLogicOp called with bogus opcode: %d", opcode);
455
b->logicOpMode = opcode;
456
DIRTY(bb->dirty, g->neg_bitid);
457
DIRTY(bb->logicOp, g->neg_bitid);
458
DIRTY(bb->indexLogicOp, g->neg_bitid);
461
461
void STATE_APIENTRY crStateDrawBuffer (GLenum mode)
463
CRContext *g = GetCurrentContext();
464
CRBufferState *b = &(g->buffer);
465
CRStateBits *sb = GetCurrentBits();
466
CRBufferBits *bb = &(sb->buffer);
468
if (g->current.inBeginEnd)
470
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glDrawBuffer called in begin/end");
487
case GL_FRONT_AND_BACK:
494
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glDrawBuffer called with bogus mode: %d", mode);
498
b->drawBuffer = mode;
499
DIRTY(bb->dirty, g->neg_bitid);
500
DIRTY(bb->drawBuffer, g->neg_bitid);
463
CRContext *g = GetCurrentContext();
464
CRBufferState *b = &(g->buffer);
465
CRStateBits *sb = GetCurrentBits();
466
CRBufferBits *bb = &(sb->buffer);
468
if (g->current.inBeginEnd)
470
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glDrawBuffer called in begin/end");
487
case GL_FRONT_AND_BACK:
492
if (g->framebufferobject.drawFB)
494
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glDrawBuffer invalud mode while fbo is active");
499
if (mode>=GL_COLOR_ATTACHMENT0_EXT && mode<=GL_COLOR_ATTACHMENT15_EXT)
501
if (!g->framebufferobject.drawFB)
503
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glDrawBuffer invalud mode while fbo is inactive");
509
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glDrawBuffer called with bogus mode: %d", mode);
514
if (g->framebufferobject.drawFB)
516
g->framebufferobject.drawFB->drawbuffer[0] = mode;
520
b->drawBuffer = mode;
521
DIRTY(bb->dirty, g->neg_bitid);
522
DIRTY(bb->drawBuffer, g->neg_bitid);
503
526
void STATE_APIENTRY crStateReadBuffer (GLenum mode)
505
CRContext *g = GetCurrentContext();
506
CRBufferState *b = &(g->buffer);
507
CRStateBits *sb = GetCurrentBits();
508
CRBufferBits *bb = &(sb->buffer);
510
if (g->current.inBeginEnd)
512
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer called in begin/end");
529
case GL_FRONT_AND_BACK:
536
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glReadBuffer called with bogus mode: %d", mode);
540
b->readBuffer = mode;
541
DIRTY(bb->dirty, g->neg_bitid);
542
DIRTY(bb->readBuffer, g->neg_bitid);
528
CRContext *g = GetCurrentContext();
529
CRBufferState *b = &(g->buffer);
530
CRStateBits *sb = GetCurrentBits();
531
CRBufferBits *bb = &(sb->buffer);
533
if (g->current.inBeginEnd)
535
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer called in begin/end");
552
case GL_FRONT_AND_BACK:
557
if (g->framebufferobject.readFB)
559
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer invalud mode while fbo is active");
564
if (mode>=GL_COLOR_ATTACHMENT0_EXT && mode<=GL_COLOR_ATTACHMENT15_EXT)
566
if (!g->framebufferobject.readFB)
568
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer invalud mode while fbo is inactive");
573
/*@todo, check if fbo binding is complete*/
578
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glReadBuffer called with bogus mode: %d", mode);
583
if (g->framebufferobject.readFB)
585
g->framebufferobject.readFB->readbuffer = mode;
589
b->readBuffer = mode;
590
DIRTY(bb->dirty, g->neg_bitid);
591
DIRTY(bb->readBuffer, g->neg_bitid);
545
595
void STATE_APIENTRY crStateIndexMask (GLuint mask)
547
CRContext *g = GetCurrentContext();
548
CRBufferState *b = &(g->buffer);
549
CRStateBits *sp = GetCurrentBits();
550
CRBufferBits *bb = &(sp->buffer);
552
if (g->current.inBeginEnd)
554
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer called in begin/end");
560
b->indexWriteMask = mask;
561
DIRTY(bb->dirty, g->neg_bitid);
562
DIRTY(bb->indexMask, g->neg_bitid);
597
CRContext *g = GetCurrentContext();
598
CRBufferState *b = &(g->buffer);
599
CRStateBits *sp = GetCurrentBits();
600
CRBufferBits *bb = &(sp->buffer);
602
if (g->current.inBeginEnd)
604
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer called in begin/end");
610
b->indexWriteMask = mask;
611
DIRTY(bb->dirty, g->neg_bitid);
612
DIRTY(bb->indexMask, g->neg_bitid);
565
615
void STATE_APIENTRY crStateColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
567
CRContext *g = GetCurrentContext();
568
CRBufferState *b = &(g->buffer);
569
CRStateBits *sp = GetCurrentBits();
570
CRBufferBits *bb = &(sp->buffer);
572
if (g->current.inBeginEnd)
574
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer called in begin/end");
580
b->colorWriteMask.r = red;
581
b->colorWriteMask.g = green;
582
b->colorWriteMask.b = blue;
583
b->colorWriteMask.a = alpha;
584
DIRTY(bb->dirty, g->neg_bitid);
585
DIRTY(bb->colorWriteMask, g->neg_bitid);
617
CRContext *g = GetCurrentContext();
618
CRBufferState *b = &(g->buffer);
619
CRStateBits *sp = GetCurrentBits();
620
CRBufferBits *bb = &(sp->buffer);
622
if (g->current.inBeginEnd)
624
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glReadBuffer called in begin/end");
630
b->colorWriteMask.r = red;
631
b->colorWriteMask.g = green;
632
b->colorWriteMask.b = blue;
633
b->colorWriteMask.a = alpha;
634
DIRTY(bb->dirty, g->neg_bitid);
635
DIRTY(bb->colorWriteMask, g->neg_bitid);
588
638
void STATE_APIENTRY crStateClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
590
CRContext *g = GetCurrentContext();
591
CRBufferState *b = &(g->buffer);
592
CRStateBits *sp = GetCurrentBits();
593
CRBufferBits *bb = &(sp->buffer);
595
if (g->current.inBeginEnd)
597
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearColor called in begin/end");
603
if (red < 0.0f) red = 0.0f;
604
if (red > 1.0f) red = 1.0f;
605
if (green < 0.0f) green = 0.0f;
606
if (green > 1.0f) green = 1.0f;
607
if (blue < 0.0f) blue = 0.0f;
608
if (blue > 1.0f) blue = 1.0f;
609
if (alpha < 0.0f) alpha = 0.0f;
610
if (alpha > 1.0f) alpha = 1.0f;
612
b->colorClearValue.r = red;
613
b->colorClearValue.g = green;
614
b->colorClearValue.b = blue;
615
b->colorClearValue.a = alpha;
616
DIRTY(bb->dirty, g->neg_bitid);
617
DIRTY(bb->clearColor, g->neg_bitid);
640
CRContext *g = GetCurrentContext();
641
CRBufferState *b = &(g->buffer);
642
CRStateBits *sp = GetCurrentBits();
643
CRBufferBits *bb = &(sp->buffer);
645
if (g->current.inBeginEnd)
647
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearColor called in begin/end");
653
if (red < 0.0f) red = 0.0f;
654
if (red > 1.0f) red = 1.0f;
655
if (green < 0.0f) green = 0.0f;
656
if (green > 1.0f) green = 1.0f;
657
if (blue < 0.0f) blue = 0.0f;
658
if (blue > 1.0f) blue = 1.0f;
659
if (alpha < 0.0f) alpha = 0.0f;
660
if (alpha > 1.0f) alpha = 1.0f;
662
b->colorClearValue.r = red;
663
b->colorClearValue.g = green;
664
b->colorClearValue.b = blue;
665
b->colorClearValue.a = alpha;
666
DIRTY(bb->dirty, g->neg_bitid);
667
DIRTY(bb->clearColor, g->neg_bitid);
620
670
void STATE_APIENTRY crStateClearIndex (GLfloat c)
622
CRContext *g = GetCurrentContext();
623
CRBufferState *b = &(g->buffer);
624
CRStateBits *sp = GetCurrentBits();
625
CRBufferBits *bb = &(sp->buffer);
627
if (g->current.inBeginEnd)
629
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearIndex called in begin/end");
633
b->indexClearValue = c;
634
DIRTY(bb->dirty, g->neg_bitid);
635
DIRTY(bb->clearIndex, g->neg_bitid);
672
CRContext *g = GetCurrentContext();
673
CRBufferState *b = &(g->buffer);
674
CRStateBits *sp = GetCurrentBits();
675
CRBufferBits *bb = &(sp->buffer);
677
if (g->current.inBeginEnd)
679
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearIndex called in begin/end");
683
b->indexClearValue = c;
684
DIRTY(bb->dirty, g->neg_bitid);
685
DIRTY(bb->clearIndex, g->neg_bitid);
638
688
void STATE_APIENTRY crStateClearDepth (GLclampd depth)
640
CRContext *g = GetCurrentContext();
641
CRBufferState *b = &(g->buffer);
642
CRStateBits *sp = GetCurrentBits();
643
CRBufferBits *bb = &(sp->buffer);
645
if (g->current.inBeginEnd)
647
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearDepth called in begin/end");
653
if (depth < 0.0) depth = 0.0;
654
if (depth > 1.0) depth = 1.0;
656
b->depthClearValue = (GLdefault) depth;
657
DIRTY(bb->dirty, g->neg_bitid);
658
DIRTY(bb->clearDepth, g->neg_bitid);
690
CRContext *g = GetCurrentContext();
691
CRBufferState *b = &(g->buffer);
692
CRStateBits *sp = GetCurrentBits();
693
CRBufferBits *bb = &(sp->buffer);
695
if (g->current.inBeginEnd)
697
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearDepth called in begin/end");
703
if (depth < 0.0) depth = 0.0;
704
if (depth > 1.0) depth = 1.0;
706
b->depthClearValue = (GLdefault) depth;
707
DIRTY(bb->dirty, g->neg_bitid);
708
DIRTY(bb->clearDepth, g->neg_bitid);
661
711
void STATE_APIENTRY crStateClearAccum (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
663
CRContext *g = GetCurrentContext();
664
CRBufferState *b = &(g->buffer);
665
CRStateBits *sp = GetCurrentBits();
666
CRBufferBits *bb = &(sp->buffer);
668
if (g->current.inBeginEnd)
670
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearAccum called in begin/end");
676
if (red < -1.0f) red = 0.0f;
677
if (red > 1.0f) red = 1.0f;
678
if (green < -1.0f) green = 0.0f;
679
if (green > 1.0f) green = 1.0f;
680
if (blue < -1.0f) blue = 0.0f;
681
if (blue > 1.0f) blue = 1.0f;
682
if (alpha < -1.0f) alpha = 0.0f;
683
if (alpha > 1.0f) alpha = 1.0f;
685
b->accumClearValue.r = red;
686
b->accumClearValue.g = green;
687
b->accumClearValue.b = blue;
688
b->accumClearValue.a = alpha;
689
DIRTY(bb->dirty, g->neg_bitid);
690
DIRTY(bb->clearAccum, g->neg_bitid);
713
CRContext *g = GetCurrentContext();
714
CRBufferState *b = &(g->buffer);
715
CRStateBits *sp = GetCurrentBits();
716
CRBufferBits *bb = &(sp->buffer);
718
if (g->current.inBeginEnd)
720
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glClearAccum called in begin/end");
726
if (red < -1.0f) red = 0.0f;
727
if (red > 1.0f) red = 1.0f;
728
if (green < -1.0f) green = 0.0f;
729
if (green > 1.0f) green = 1.0f;
730
if (blue < -1.0f) blue = 0.0f;
731
if (blue > 1.0f) blue = 1.0f;
732
if (alpha < -1.0f) alpha = 0.0f;
733
if (alpha > 1.0f) alpha = 1.0f;
735
b->accumClearValue.r = red;
736
b->accumClearValue.g = green;
737
b->accumClearValue.b = blue;
738
b->accumClearValue.a = alpha;
739
DIRTY(bb->dirty, g->neg_bitid);
740
DIRTY(bb->clearAccum, g->neg_bitid);
693
743
void STATE_APIENTRY crStateDepthMask (GLboolean b)
695
CRContext *g = GetCurrentContext();
696
CRBufferState *bs = &(g->buffer);
697
CRStateBits *sp = GetCurrentBits();
698
CRBufferBits *bb = &(sp->buffer);
700
if (g->current.inBeginEnd)
702
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "DepthMask called in begin/end");
709
DIRTY(bb->dirty, g->neg_bitid);
710
DIRTY(bb->depthMask, g->neg_bitid);
745
CRContext *g = GetCurrentContext();
746
CRBufferState *bs = &(g->buffer);
747
CRStateBits *sp = GetCurrentBits();
748
CRBufferBits *bb = &(sp->buffer);
750
if (g->current.inBeginEnd)
752
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "DepthMask called in begin/end");
759
DIRTY(bb->dirty, g->neg_bitid);
760
DIRTY(bb->depthMask, g->neg_bitid);