Lines Matching refs:ctx
54 GET_CURRENT_CONTEXT(ctx);
56 if (ctx->RenderMode==GL_FEEDBACK) {
57 _mesa_error( ctx, GL_INVALID_OPERATION, "glFeedbackBuffer" );
61 _mesa_error( ctx, GL_INVALID_VALUE, "glFeedbackBuffer(size<0)" );
65 _mesa_error( ctx, GL_INVALID_VALUE, "glFeedbackBuffer(buffer==NULL)" );
66 ctx->Feedback.BufferSize = 0;
72 ctx->Feedback._Mask = 0;
75 ctx->Feedback._Mask = FB_3D;
78 ctx->Feedback._Mask = (FB_3D | FB_COLOR);
81 ctx->Feedback._Mask = (FB_3D | FB_COLOR | FB_TEXTURE);
84 ctx->Feedback._Mask = (FB_3D | FB_4D | FB_COLOR | FB_TEXTURE);
87 _mesa_error( ctx, GL_INVALID_ENUM, "glFeedbackBuffer" );
91 FLUSH_VERTICES(ctx, _NEW_RENDERMODE, 0); /* Always flush */
92 ctx->Feedback.Type = type;
93 ctx->Feedback.BufferSize = size;
94 ctx->Feedback.Buffer = buffer;
95 ctx->Feedback.Count = 0; /* Because of this. */
102 GET_CURRENT_CONTEXT(ctx);
104 if (ctx->RenderMode==GL_FEEDBACK) {
105 FLUSH_VERTICES(ctx, 0, 0);
106 _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_PASS_THROUGH_TOKEN );
107 _mesa_feedback_token( ctx, token );
116 _mesa_feedback_vertex(struct gl_context *ctx,
121 _mesa_feedback_token( ctx, win[0] );
122 _mesa_feedback_token( ctx, win[1] );
123 if (ctx->Feedback._Mask & FB_3D) {
124 _mesa_feedback_token( ctx, win[2] );
126 if (ctx->Feedback._Mask & FB_4D) {
127 _mesa_feedback_token( ctx, win[3] );
129 if (ctx->Feedback._Mask & FB_COLOR) {
130 _mesa_feedback_token( ctx, color[0] );
131 _mesa_feedback_token( ctx, color[1] );
132 _mesa_feedback_token( ctx, color[2] );
133 _mesa_feedback_token( ctx, color[3] );
135 if (ctx->Feedback._Mask & FB_TEXTURE) {
136 _mesa_feedback_token( ctx, texcoord[0] );
137 _mesa_feedback_token( ctx, texcoord[1] );
138 _mesa_feedback_token( ctx, texcoord[2] );
139 _mesa_feedback_token( ctx, texcoord[3] );
164 GET_CURRENT_CONTEXT(ctx);
167 _mesa_error(ctx, GL_INVALID_VALUE, "glSelectBuffer(size)");
171 if (ctx->RenderMode==GL_SELECT) {
172 _mesa_error( ctx, GL_INVALID_OPERATION, "glSelectBuffer" );
176 FLUSH_VERTICES(ctx, _NEW_RENDERMODE, 0);
177 ctx->Select.Buffer = buffer;
178 ctx->Select.BufferSize = size;
179 ctx->Select.BufferCount = 0;
180 ctx->Select.HitFlag = GL_FALSE;
181 ctx->Select.HitMinZ = 1.0;
182 ctx->Select.HitMaxZ = 0.0;
189 * \param ctx GL context.
196 write_record(struct gl_context *ctx, GLuint value)
198 if (ctx->Select.BufferCount < ctx->Select.BufferSize) {
199 ctx->Select.Buffer[ctx->Select.BufferCount] = value;
201 ctx->Select.BufferCount++;
208 * \param ctx GL context.
215 _mesa_update_hitflag(struct gl_context *ctx, GLfloat z)
217 ctx->Select.HitFlag = GL_TRUE;
218 if (z < ctx->Select.HitMinZ) {
219 ctx->Select.HitMinZ = z;
221 if (z > ctx->Select.HitMaxZ) {
222 ctx->Select.HitMaxZ = z;
227 alloc_select_resource(struct gl_context *ctx)
229 struct gl_selection *s = &ctx->Select;
231 if (!ctx->Const.HardwareAcceleratedSelect)
234 if (!ctx->HWSelectModeBeginEnd) {
235 ctx->HWSelectModeBeginEnd = _mesa_alloc_dispatch_table(false);
236 if (!ctx->HWSelectModeBeginEnd) {
237 _mesa_error(ctx, GL_OUT_OF_MEMORY, "Cannot allocate HWSelectModeBeginEnd");
240 vbo_install_hw_select_begin_end(ctx);
246 _mesa_error(ctx, GL_OUT_OF_MEMORY, "Cannot allocate name stack save buffer");
252 s->Result = _mesa_bufferobj_alloc(ctx, -1);
254 _mesa_error(ctx, GL_OUT_OF_MEMORY, "Cannot allocate select result buffer");
265 bool success = _mesa_bufferobj_data(ctx,
272 _mesa_reference_buffer_object(ctx, &s->Result, NULL);
273 _mesa_error(ctx, GL_OUT_OF_MEMORY, "Cannot init result buffer");
280 save_used_name_stack(struct gl_context *ctx)
282 struct gl_selection *s = &ctx->Select;
284 if (!ctx->Const.HardwareAcceleratedSelect)
335 update_hit_record(struct gl_context *ctx)
337 struct gl_selection *s = &ctx->Select;
339 if (ctx->Const.HardwareAcceleratedSelect) {
345 _mesa_bufferobj_get_subdata(ctx, 0, size, result, s->Result);
382 write_record(ctx, depth);
383 write_record(ctx, zmin);
384 write_record(ctx, zmax);
387 write_record(ctx, save[j]);
394 _mesa_bufferobj_subdata(ctx, 0, size, result, s->Result);
409 write_record(ctx, s->NameStackDepth);
410 write_record(ctx, zmin);
411 write_record(ctx, zmax);
413 write_record(ctx, s->NameStack[i]);
424 reset_name_stack_to_empty(struct gl_context *ctx)
426 struct gl_selection *s = &ctx->Select;
433 if (ctx->Const.HardwareAcceleratedSelect) {
447 GET_CURRENT_CONTEXT(ctx);
450 if (ctx->RenderMode != GL_SELECT)
453 FLUSH_VERTICES(ctx, 0, 0);
455 save_used_name_stack(ctx);
456 update_hit_record(ctx);
458 reset_name_stack_to_empty(ctx);
460 ctx->NewState |= _NEW_RENDERMODE;
472 GET_CURRENT_CONTEXT(ctx);
474 if (ctx->RenderMode != GL_SELECT) {
477 if (ctx->Select.NameStackDepth == 0) {
478 _mesa_error( ctx, GL_INVALID_OPERATION, "glLoadName" );
482 if (!ctx->Const.HardwareAcceleratedSelect || save_used_name_stack(ctx)) {
483 FLUSH_VERTICES(ctx, 0, 0);
484 update_hit_record(ctx);
487 ctx->Select.NameStack[ctx->Select.NameStackDepth-1] = name;
488 ctx->NewState |= _NEW_RENDERMODE;
500 GET_CURRENT_CONTEXT(ctx);
502 if (ctx->RenderMode != GL_SELECT) {
506 if (ctx->Select.NameStackDepth >= MAX_NAME_STACK_DEPTH) {
507 _mesa_error( ctx, GL_STACK_OVERFLOW, "glPushName" );
511 if (!ctx->Const.HardwareAcceleratedSelect || save_used_name_stack(ctx)) {
512 FLUSH_VERTICES(ctx, 0, 0);
513 update_hit_record(ctx);
516 ctx->Select.NameStack[ctx->Select.NameStackDepth++] = name;
517 ctx->NewState |= _NEW_RENDERMODE;
527 GET_CURRENT_CONTEXT(ctx);
529 if (ctx->RenderMode != GL_SELECT) {
533 if (ctx->Select.NameStackDepth == 0) {
534 _mesa_error( ctx, GL_STACK_UNDERFLOW, "glPopName" );
538 if (!ctx->Const.HardwareAcceleratedSelect || save_used_name_stack(ctx)) {
539 FLUSH_VERTICES(ctx, 0, 0);
540 update_hit_record(ctx);
543 ctx->Select.NameStackDepth--;
544 ctx->NewState |= _NEW_RENDERMODE;
572 GET_CURRENT_CONTEXT(ctx);
574 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
577 _mesa_debug(ctx, "glRenderMode %s\n", _mesa_enum_to_string(mode));
579 FLUSH_VERTICES(ctx, _NEW_RENDERMODE | _NEW_FF_VERT_PROGRAM |
582 switch (ctx->RenderMode) {
587 save_used_name_stack(ctx);
588 update_hit_record(ctx);
590 if (ctx->Select.BufferCount > ctx->Select.BufferSize) {
593 _mesa_warning(ctx, "Feedback buffer overflow");
598 result = ctx->Select.Hits;
600 ctx->Select.BufferCount = 0;
601 ctx->Select.Hits = 0;
603 reset_name_stack_to_empty(ctx);
606 if (ctx->Feedback.Count > ctx->Feedback.BufferSize) {
611 result = ctx->Feedback.Count;
613 ctx->Feedback.Count = 0;
616 _mesa_error( ctx, GL_INVALID_ENUM, "glRenderMode" );
624 if (ctx->Select.BufferSize==0) {
626 _mesa_error( ctx, GL_INVALID_OPERATION, "glRenderMode" );
628 alloc_select_resource(ctx);
631 if (ctx->Feedback.BufferSize==0) {
633 _mesa_error( ctx, GL_INVALID_OPERATION, "glRenderMode" );
637 _mesa_error( ctx, GL_INVALID_ENUM, "glRenderMode" );
641 st_RenderMode( ctx, mode );
644 ctx->RenderMode = mode;
659 void _mesa_init_feedback( struct gl_context * ctx )
662 ctx->Feedback.Type = GL_2D; /* TODO: verify */
663 ctx->Feedback.Buffer = NULL;
664 ctx->Feedback.BufferSize = 0;
665 ctx->Feedback.Count = 0;
668 ctx->Select.Buffer = NULL;
669 ctx->Select.BufferSize = 0;
670 ctx->Select.BufferCount = 0;
671 ctx->Select.Hits = 0;
672 ctx->Select.NameStackDepth = 0;
675 ctx->RenderMode = GL_RENDER;
678 void _mesa_free_feedback(struct gl_context * ctx)
680 struct gl_selection *s = &ctx->Select;
683 _mesa_reference_buffer_object(ctx, &s->Result, NULL);