summaryrefslogtreecommitdiff
path: root/xc/extras/Mesa/src/feedback.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/extras/Mesa/src/feedback.c')
-rw-r--r--xc/extras/Mesa/src/feedback.c123
1 files changed, 70 insertions, 53 deletions
diff --git a/xc/extras/Mesa/src/feedback.c b/xc/extras/Mesa/src/feedback.c
index ff39a4be0..b9a2b8e98 100644
--- a/xc/extras/Mesa/src/feedback.c
+++ b/xc/extras/Mesa/src/feedback.c
@@ -1,10 +1,10 @@
-/* $Id: feedback.c,v 1.3 1999/12/14 02:39:38 daryll Exp $ */
+/* $Id: feedback.c,v 1.4 2000/01/30 00:27:01 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.1
+ * Version: 3.3
*
- * Copyright (C) 1999 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -25,18 +25,10 @@
*/
-
-
-
#ifdef PC_HEADER
#include "all.h"
#else
-#ifndef XFree86Server
-#include <assert.h>
-#include <stdio.h>
-#else
-#include "GL/xf86glx.h"
-#endif
+#include "glheader.h"
#include "context.h"
#include "enums.h"
#include "feedback.h"
@@ -57,8 +49,9 @@
void
-gl_FeedbackBuffer( GLcontext *ctx, GLsizei size, GLenum type, GLfloat *buffer )
+_mesa_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx, "glFeedbackBuffer" );
if (ctx->RenderMode==GL_FEEDBACK) {
@@ -114,8 +107,10 @@ gl_FeedbackBuffer( GLcontext *ctx, GLsizei size, GLenum type, GLfloat *buffer )
-void gl_PassThrough( GLcontext *ctx, GLfloat token )
+void
+_mesa_PassThrough( GLfloat token )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPassThrough");
if (ctx->RenderMode==GL_FEEDBACK) {
@@ -162,39 +157,46 @@ void gl_feedback_vertex( GLcontext *ctx,
-static void gl_do_feedback_vertex( GLcontext *ctx, GLuint v, GLuint pv )
+static void feedback_vertex( GLcontext *ctx, GLuint v, GLuint pv )
{
GLfloat win[4];
GLfloat color[4];
GLfloat tc[4];
GLuint texUnit = ctx->Texture.CurrentTransformUnit;
- struct vertex_buffer *VB = ctx->VB;
+ const struct vertex_buffer *VB = ctx->VB;
+ GLuint index;
win[0] = VB->Win.data[v][0];
win[1] = VB->Win.data[v][1];
win[2] = VB->Win.data[v][2] / DEPTH_SCALE;
win[3] = 1.0 / VB->Win.data[v][3];
- if (ctx->Light.ShadeModel==GL_SMOOTH) pv = v;
+ if (ctx->Light.ShadeModel == GL_SMOOTH)
+ pv = v;
UBYTE_RGBA_TO_FLOAT_RGBA( color, VB->ColorPtr->data[pv] );
if (VB->TexCoordPtr[texUnit]->size == 4 &&
- VB->TexCoordPtr[texUnit]->data[v][3]!=0.0)
- {
+ VB->TexCoordPtr[texUnit]->data[v][3] != 0.0) {
GLfloat invq = 1.0F / VB->TexCoordPtr[texUnit]->data[v][3];
tc[0] = VB->TexCoordPtr[texUnit]->data[v][0] * invq;
tc[1] = VB->TexCoordPtr[texUnit]->data[v][1] * invq;
tc[2] = VB->TexCoordPtr[texUnit]->data[v][2] * invq;
tc[3] = VB->TexCoordPtr[texUnit]->data[v][3];
- } else {
+ }
+ else {
ASSIGN_4V(tc, 0,0,0,1);
COPY_SZ_4V(tc,
VB->TexCoordPtr[texUnit]->size,
VB->TexCoordPtr[texUnit]->data[v]);
}
- gl_feedback_vertex( ctx, win, color, VB->IndexPtr->data[v], tc );
+ if (VB->IndexPtr)
+ index = VB->IndexPtr->data[v];
+ else
+ index = 0;
+
+ gl_feedback_vertex( ctx, win, color, index, tc );
}
@@ -209,9 +211,9 @@ void gl_feedback_triangle( GLcontext *ctx,
FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_POLYGON_TOKEN );
FEEDBACK_TOKEN( ctx, (GLfloat) 3 ); /* three vertices */
- gl_do_feedback_vertex( ctx, v0, pv );
- gl_do_feedback_vertex( ctx, v1, pv );
- gl_do_feedback_vertex( ctx, v2, pv );
+ feedback_vertex( ctx, v0, pv );
+ feedback_vertex( ctx, v1, pv );
+ feedback_vertex( ctx, v2, pv );
}
}
@@ -225,8 +227,8 @@ void gl_feedback_line( GLcontext *ctx, GLuint v1, GLuint v2, GLuint pv )
FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) token );
- gl_do_feedback_vertex( ctx, v1, pv );
- gl_do_feedback_vertex( ctx, v2, pv );
+ feedback_vertex( ctx, v1, pv );
+ feedback_vertex( ctx, v2, pv );
ctx->StippleCounter++;
}
@@ -234,14 +236,15 @@ void gl_feedback_line( GLcontext *ctx, GLuint v1, GLuint v2, GLuint pv )
void gl_feedback_points( GLcontext *ctx, GLuint first, GLuint last )
{
- struct vertex_buffer *VB = ctx->VB;
+ const struct vertex_buffer *VB = ctx->VB;
GLuint i;
- for (i=first;i<=last;i++)
+ for (i=first;i<=last;i++) {
if (VB->ClipMask[i]==0) {
FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_POINT_TOKEN );
- gl_do_feedback_vertex( ctx, i, i );
+ feedback_vertex( ctx, i, i );
}
+ }
}
@@ -256,8 +259,10 @@ void gl_feedback_points( GLcontext *ctx, GLuint first, GLuint last )
/*
* NOTE: this function can't be put in a display list.
*/
-void gl_SelectBuffer( GLcontext *ctx, GLsizei size, GLuint *buffer )
+void
+_mesa_SelectBuffer( GLsizei size, GLuint *buffer )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glSelectBuffer");
if (ctx->RenderMode==GL_SELECT) {
gl_error( ctx, GL_INVALID_OPERATION, "glSelectBuffer" );
@@ -297,9 +302,9 @@ void gl_select_triangle( GLcontext *ctx,
struct vertex_buffer *VB = ctx->VB;
if (gl_cull_triangle( ctx, v0, v1, v2, 0 )) {
- gl_update_hitflag( ctx, VB->Win.data[v0][3] / DEPTH_SCALE );
- gl_update_hitflag( ctx, VB->Win.data[v1][3] / DEPTH_SCALE );
- gl_update_hitflag( ctx, VB->Win.data[v2][3] / DEPTH_SCALE );
+ gl_update_hitflag( ctx, VB->Win.data[v0][2] / DEPTH_SCALE );
+ gl_update_hitflag( ctx, VB->Win.data[v1][2] / DEPTH_SCALE );
+ gl_update_hitflag( ctx, VB->Win.data[v2][2] / DEPTH_SCALE );
}
}
@@ -309,18 +314,21 @@ void gl_select_line( GLcontext *ctx,
{
struct vertex_buffer *VB = ctx->VB;
- gl_update_hitflag( ctx, VB->Win.data[v0][3] / DEPTH_SCALE );
- gl_update_hitflag( ctx, VB->Win.data[v1][3] / DEPTH_SCALE );
+ gl_update_hitflag( ctx, VB->Win.data[v0][2] / DEPTH_SCALE );
+ gl_update_hitflag( ctx, VB->Win.data[v1][2] / DEPTH_SCALE );
}
+
void gl_select_points( GLcontext *ctx, GLuint first, GLuint last )
{
struct vertex_buffer *VB = ctx->VB;
GLuint i;
- for (i=first;i<=last;i++)
- if (VB->ClipMask[i]==0)
- gl_update_hitflag( ctx, VB->Win.data[i][3] / DEPTH_SCALE);
+ for (i=first;i<=last;i++) {
+ if (VB->ClipMask[i]==0) {
+ gl_update_hitflag( ctx, VB->Win.data[i][2] / DEPTH_SCALE);
+ }
+ }
}
@@ -339,7 +347,7 @@ static void write_hit_record( GLcontext *ctx )
WRITE_RECORD( ctx, ctx->Select.NameStackDepth );
WRITE_RECORD( ctx, zmin );
WRITE_RECORD( ctx, zmax );
- for (i=0;i<ctx->Select.NameStackDepth;i++) {
+ for (i = 0; i < ctx->Select.NameStackDepth; i++) {
WRITE_RECORD( ctx, ctx->Select.NameStack[i] );
}
@@ -351,11 +359,13 @@ static void write_hit_record( GLcontext *ctx )
-void gl_InitNames( GLcontext *ctx )
+void
+_mesa_InitNames( void )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glInitNames");
/* Record the hit before the HitFlag is wiped out again. */
- if (ctx->RenderMode==GL_SELECT) {
+ if (ctx->RenderMode == GL_SELECT) {
if (ctx->Select.HitFlag) {
write_hit_record( ctx );
}
@@ -368,20 +378,22 @@ void gl_InitNames( GLcontext *ctx )
-void gl_LoadName( GLcontext *ctx, GLuint name )
+void
+_mesa_LoadName( GLuint name )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLoadName");
- if (ctx->RenderMode!=GL_SELECT) {
+ if (ctx->RenderMode != GL_SELECT) {
return;
}
- if (ctx->Select.NameStackDepth==0) {
+ if (ctx->Select.NameStackDepth == 0) {
gl_error( ctx, GL_INVALID_OPERATION, "glLoadName" );
return;
}
if (ctx->Select.HitFlag) {
write_hit_record( ctx );
}
- if (ctx->Select.NameStackDepth<MAX_NAME_STACK_DEPTH) {
+ if (ctx->Select.NameStackDepth < MAX_NAME_STACK_DEPTH) {
ctx->Select.NameStack[ctx->Select.NameStackDepth-1] = name;
}
else {
@@ -390,16 +402,18 @@ void gl_LoadName( GLcontext *ctx, GLuint name )
}
-void gl_PushName( GLcontext *ctx, GLuint name )
+void
+_mesa_PushName( GLuint name )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPushName");
- if (ctx->RenderMode!=GL_SELECT) {
+ if (ctx->RenderMode != GL_SELECT) {
return;
}
if (ctx->Select.HitFlag) {
write_hit_record( ctx );
}
- if (ctx->Select.NameStackDepth<MAX_NAME_STACK_DEPTH) {
+ if (ctx->Select.NameStackDepth < MAX_NAME_STACK_DEPTH) {
ctx->Select.NameStack[ctx->Select.NameStackDepth++] = name;
}
else {
@@ -409,16 +423,18 @@ void gl_PushName( GLcontext *ctx, GLuint name )
-void gl_PopName( GLcontext *ctx )
+void
+_mesa_PopName( void )
{
+ GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPopName");
- if (ctx->RenderMode!=GL_SELECT) {
+ if (ctx->RenderMode != GL_SELECT) {
return;
}
if (ctx->Select.HitFlag) {
write_hit_record( ctx );
}
- if (ctx->Select.NameStackDepth>0) {
+ if (ctx->Select.NameStackDepth > 0) {
ctx->Select.NameStackDepth--;
}
else {
@@ -437,8 +453,10 @@ void gl_PopName( GLcontext *ctx )
/*
* NOTE: this function can't be put in a display list.
*/
-GLint gl_RenderMode( GLcontext *ctx, GLenum mode )
+GLint
+_mesa_RenderMode( GLenum mode )
{
+ GET_CURRENT_CONTEXT(ctx);
GLint result;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glRenderMode", 0);
@@ -507,7 +525,6 @@ GLint gl_RenderMode( GLcontext *ctx, GLenum mode )
return 0;
}
-
ctx->RenderMode = mode;
ctx->NewState |= NEW_ALL;