Lines Matching refs:ctx

51    GET_CURRENT_CONTEXT(ctx);
53 if (ctx->RenderMode==GL_FEEDBACK) {
54 _mesa_error( ctx, GL_INVALID_OPERATION, "glFeedbackBuffer" );
58 _mesa_error( ctx, GL_INVALID_VALUE, "glFeedbackBuffer(size<0)" );
62 _mesa_error( ctx, GL_INVALID_VALUE, "glFeedbackBuffer(buffer==NULL)" );
63 ctx->Feedback.BufferSize = 0;
69 ctx->Feedback._Mask = 0;
72 ctx->Feedback._Mask = FB_3D;
75 ctx->Feedback._Mask = (FB_3D | FB_COLOR);
78 ctx->Feedback._Mask = (FB_3D | FB_COLOR | FB_TEXTURE);
81 ctx->Feedback._Mask = (FB_3D | FB_4D | FB_COLOR | FB_TEXTURE);
84 _mesa_error( ctx, GL_INVALID_ENUM, "glFeedbackBuffer" );
88 FLUSH_VERTICES(ctx, _NEW_RENDERMODE); /* Always flush */
89 ctx->Feedback.Type = type;
90 ctx->Feedback.BufferSize = size;
91 ctx->Feedback.Buffer = buffer;
92 ctx->Feedback.Count = 0; /* Because of this. */
99 GET_CURRENT_CONTEXT(ctx);
101 if (ctx->RenderMode==GL_FEEDBACK) {
102 FLUSH_VERTICES(ctx, 0);
103 _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_PASS_THROUGH_TOKEN );
104 _mesa_feedback_token( ctx, token );
113 _mesa_feedback_vertex(struct gl_context *ctx,
118 _mesa_feedback_token( ctx, win[0] );
119 _mesa_feedback_token( ctx, win[1] );
120 if (ctx->Feedback._Mask & FB_3D) {
121 _mesa_feedback_token( ctx, win[2] );
123 if (ctx->Feedback._Mask & FB_4D) {
124 _mesa_feedback_token( ctx, win[3] );
126 if (ctx->Feedback._Mask & FB_COLOR) {
127 _mesa_feedback_token( ctx, color[0] );
128 _mesa_feedback_token( ctx, color[1] );
129 _mesa_feedback_token( ctx, color[2] );
130 _mesa_feedback_token( ctx, color[3] );
132 if (ctx->Feedback._Mask & FB_TEXTURE) {
133 _mesa_feedback_token( ctx, texcoord[0] );
134 _mesa_feedback_token( ctx, texcoord[1] );
135 _mesa_feedback_token( ctx, texcoord[2] );
136 _mesa_feedback_token( ctx, texcoord[3] );
161 GET_CURRENT_CONTEXT(ctx);
164 _mesa_error(ctx, GL_INVALID_VALUE, "glSelectBuffer(size)");
168 if (ctx->RenderMode==GL_SELECT) {
169 _mesa_error( ctx, GL_INVALID_OPERATION, "glSelectBuffer" );
173 FLUSH_VERTICES(ctx, _NEW_RENDERMODE);
174 ctx->Select.Buffer = buffer;
175 ctx->Select.BufferSize = size;
176 ctx->Select.BufferCount = 0;
177 ctx->Select.HitFlag = GL_FALSE;
178 ctx->Select.HitMinZ = 1.0;
179 ctx->Select.HitMaxZ = 0.0;
186 * \param ctx GL context.
193 write_record(struct gl_context *ctx, GLuint value)
195 if (ctx->Select.BufferCount < ctx->Select.BufferSize) {
196 ctx->Select.Buffer[ctx->Select.BufferCount] = value;
198 ctx->Select.BufferCount++;
205 * \param ctx GL context.
212 _mesa_update_hitflag(struct gl_context *ctx, GLfloat z)
214 ctx->Select.HitFlag = GL_TRUE;
215 if (z < ctx->Select.HitMinZ) {
216 ctx->Select.HitMinZ = z;
218 if (z > ctx->Select.HitMaxZ) {
219 ctx->Select.HitMaxZ = z;
227 * \param ctx GL context.
236 write_hit_record(struct gl_context *ctx)
244 assert( ctx != NULL ); /* this line magically fixes a SunOS 5.x/gcc bug */
245 zmin = (GLuint) ((GLfloat) zscale * ctx->Select.HitMinZ);
246 zmax = (GLuint) ((GLfloat) zscale * ctx->Select.HitMaxZ);
248 write_record( ctx, ctx->Select.NameStackDepth );
249 write_record( ctx, zmin );
250 write_record( ctx, zmax );
251 for (i = 0; i < ctx->Select.NameStackDepth; i++) {
252 write_record( ctx, ctx->Select.NameStack[i] );
255 ctx->Select.Hits++;
256 ctx->Select.HitFlag = GL_FALSE;
257 ctx->Select.HitMinZ = 1.0;
258 ctx->Select.HitMaxZ = -1.0;
272 GET_CURRENT_CONTEXT(ctx);
273 FLUSH_VERTICES(ctx, 0);
276 if (ctx->RenderMode == GL_SELECT) {
277 if (ctx->Select.HitFlag) {
278 write_hit_record( ctx );
281 ctx->Select.NameStackDepth = 0;
282 ctx->Select.HitFlag = GL_FALSE;
283 ctx->Select.HitMinZ = 1.0;
284 ctx->Select.HitMaxZ = 0.0;
285 ctx->NewState |= _NEW_RENDERMODE;
303 GET_CURRENT_CONTEXT(ctx);
305 if (ctx->RenderMode != GL_SELECT) {
308 if (ctx->Select.NameStackDepth == 0) {
309 _mesa_error( ctx, GL_INVALID_OPERATION, "glLoadName" );
313 FLUSH_VERTICES(ctx, _NEW_RENDERMODE);
315 if (ctx->Select.HitFlag) {
316 write_hit_record( ctx );
318 if (ctx->Select.NameStackDepth < MAX_NAME_STACK_DEPTH) {
319 ctx->Select.NameStack[ctx->Select.NameStackDepth-1] = name;
322 ctx->Select.NameStack[MAX_NAME_STACK_DEPTH-1] = name;
341 GET_CURRENT_CONTEXT(ctx);
343 if (ctx->RenderMode != GL_SELECT) {
347 FLUSH_VERTICES(ctx, _NEW_RENDERMODE);
348 if (ctx->Select.HitFlag) {
349 write_hit_record( ctx );
351 if (ctx->Select.NameStackDepth >= MAX_NAME_STACK_DEPTH) {
352 _mesa_error( ctx, GL_STACK_OVERFLOW, "glPushName" );
355 ctx->Select.NameStack[ctx->Select.NameStackDepth++] = name;
371 GET_CURRENT_CONTEXT(ctx);
373 if (ctx->RenderMode != GL_SELECT) {
377 FLUSH_VERTICES(ctx, _NEW_RENDERMODE);
378 if (ctx->Select.HitFlag) {
379 write_hit_record( ctx );
381 if (ctx->Select.NameStackDepth == 0) {
382 _mesa_error( ctx, GL_STACK_UNDERFLOW, "glPopName" );
385 ctx->Select.NameStackDepth--;
413 GET_CURRENT_CONTEXT(ctx);
415 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
418 _mesa_debug(ctx, "glRenderMode %s\n", _mesa_enum_to_string(mode));
420 FLUSH_VERTICES(ctx, _NEW_RENDERMODE);
422 switch (ctx->RenderMode) {
427 if (ctx->Select.HitFlag) {
428 write_hit_record( ctx );
430 if (ctx->Select.BufferCount > ctx->Select.BufferSize) {
433 _mesa_warning(ctx, "Feedback buffer overflow");
438 result = ctx->Select.Hits;
440 ctx->Select.BufferCount = 0;
441 ctx->Select.Hits = 0;
442 ctx->Select.NameStackDepth = 0;
445 if (ctx->Feedback.Count > ctx->Feedback.BufferSize) {
450 result = ctx->Feedback.Count;
452 ctx->Feedback.Count = 0;
455 _mesa_error( ctx, GL_INVALID_ENUM, "glRenderMode" );
463 if (ctx->Select.BufferSize==0) {
465 _mesa_error( ctx, GL_INVALID_OPERATION, "glRenderMode" );
469 if (ctx->Feedback.BufferSize==0) {
471 _mesa_error( ctx, GL_INVALID_OPERATION, "glRenderMode" );
475 _mesa_error( ctx, GL_INVALID_ENUM, "glRenderMode" );
479 ctx->RenderMode = mode;
480 if (ctx->Driver.RenderMode)
481 ctx->Driver.RenderMode( ctx, mode );
496 void _mesa_init_feedback( struct gl_context * ctx )
499 ctx->Feedback.Type = GL_2D; /* TODO: verify */
500 ctx->Feedback.Buffer = NULL;
501 ctx->Feedback.BufferSize = 0;
502 ctx->Feedback.Count = 0;
505 ctx->Select.Buffer = NULL;
506 ctx->Select.BufferSize = 0;
507 ctx->Select.BufferCount = 0;
508 ctx->Select.Hits = 0;
509 ctx->Select.NameStackDepth = 0;
512 ctx->RenderMode = GL_RENDER;