-/* $Id: dlist.c,v 1.31 2000/02/24 22:04:03 brianp Exp $ */
+/* $Id: dlist.c,v 1.37 2000/04/07 16:45:26 brianp Exp $ */
/*
* Mesa 3-D graphics library
#include "mem.h"
#include "pipeline.h"
#include "pixel.h"
+#include "pixeltex.h"
#include "points.h"
#include "polygon.h"
#include "readpix.h"
/* GL_ARB_multitexture */
OPCODE_ACTIVE_TEXTURE,
OPCODE_CLIENT_ACTIVE_TEXTURE,
+ /* GL_SGIX/SGIS_pixel_texture */
+ OPCODE_PIXEL_TEXGEN_SGIX,
+ OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS,
/* The following three are meta instructions */
OPCODE_ERROR, /* raise compiled-in error */
OPCODE_VERTEX_CASSETTE, /* render prebuilt vertex buffer */
InstSize[OPCODE_ERROR] = 3;
InstSize[OPCODE_VERTEX_CASSETTE] = 9;
InstSize[OPCODE_END_OF_LIST] = 1;
+ /* GL_SGIX/SGIS_pixel_texture */
+ InstSize[OPCODE_PIXEL_TEXGEN_SGIX] = 2;
+ InstSize[OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS] = 3,
/* GL_ARB_multitexture */
InstSize[OPCODE_ACTIVE_TEXTURE] = 2;
InstSize[OPCODE_CLIENT_ACTIVE_TEXTURE] = 2;
static void save_PolygonOffsetEXT( GLfloat factor, GLfloat bias )
{
- save_PolygonOffset(factor, DEPTH_SCALE * bias);
+ GET_CURRENT_CONTEXT(ctx);
+ save_PolygonOffset(factor, ctx->Visual->DepthMaxF * bias);
}
}
+static void save_PixelTexGenSGIX(GLenum mode)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ Node *n;
+ FLUSH_VB(ctx, "dlist");
+ n = alloc_instruction( ctx, OPCODE_PIXEL_TEXGEN_SGIX, 1 );
+ if (n) {
+ n[1].e = mode;
+ }
+ if (ctx->ExecuteFlag) {
+ (*ctx->Exec->PixelTexGenSGIX)( mode );
+ }
+}
+
+
+static void save_PixelTexGenParameteriSGIS(GLenum target, GLint value)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ Node *n;
+ FLUSH_VB(ctx, "dlist");
+ n = alloc_instruction( ctx, OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS, 2 );
+ if (n) {
+ n[1].e = target;
+ n[2].i = value;
+ }
+ if (ctx->ExecuteFlag) {
+ (*ctx->Exec->PixelTexGenParameteriSGIS)( target, value );
+ }
+}
+
+
+static void save_PixelTexGenParameterfSGIS(GLenum target, GLfloat value)
+{
+ save_PixelTexGenParameteriSGIS(target, (GLint) value);
+}
+
+
+static void save_PixelTexGenParameterivSGIS(GLenum target, const GLint *value)
+{
+ save_PixelTexGenParameteriSGIS(target, *value);
+}
+
+
+static void save_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value)
+{
+ save_PixelTexGenParameteriSGIS(target, (GLint) *value);
+}
void gl_compile_cassette( GLcontext *ctx )
{
(MESA_VERBOSE & VERBOSE_IMMEDIATE))
gl_print_cassette( (struct immediate *) n[1].data );
- if (0)
- fprintf(stderr, "Run cassette %d, rows %d..%d, beginstate %x\n",
+ if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) {
+ fprintf(stderr, "Run cassette %d, rows %d..%d, beginstate %x ",
IM->id,
IM->Start, IM->Count, IM->BeginState);
+ gl_print_vert_flags("orflag", IM->OrFlag);
+ }
gl_fixup_cassette( ctx, (struct immediate *) n[1].data );
gl_execute_cassette( ctx, (struct immediate *) n[1].data );
struct gl_pixelstore_attrib save = ctx->Unpack;
ctx->Unpack = _mesa_native_packing;
(*ctx->Exec->Bitmap)( (GLsizei) n[1].i, (GLsizei) n[2].i,
- n[3].f, n[4].f, n[5].f, n[6].f, n[7].data );
+ n[3].f, n[4].f, n[5].f, n[6].f, (const GLubyte *) n[7].data );
ctx->Unpack = save; /* restore */
}
break;
case OPCODE_CLIENT_ACTIVE_TEXTURE: /* GL_ARB_multitexture */
(*ctx->Exec->ClientActiveTextureARB)( n[1].e );
break;
+ case OPCODE_PIXEL_TEXGEN_SGIX: /* GL_SGIX_pixel_texture */
+ (*ctx->Exec->PixelTexGenSGIX)( n[1].e );
+ break;
+ case OPCODE_PIXEL_TEXGEN_PARAMETER_SGIS: /* GL_SGIS_pixel_texture */
+ (*ctx->Exec->PixelTexGenParameteriSGIS)( n[1].e, n[2].i );
+ break;
case OPCODE_CONTINUE:
n = (Node *) n[1].next;
break;
return 0;
}
+ /*
+ * Make this an atomic operation
+ */
+ _glthread_LOCK_MUTEX(ctx->Shared->Mutex);
+
base = _mesa_HashFindFreeKeyBlock(ctx->Shared->DisplayList, range);
if (base) {
/* reserve the list IDs by with empty/dummy lists */
_mesa_HashInsert(ctx->Shared->DisplayList, base+i, make_empty_list());
}
}
+
+ _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
+
return base;
}
/* Not all are supported */
table->BlendColor = save_BlendColor;
table->BlendEquation = save_BlendEquation;
- table->ColorSubTable = _mesa_ColorSubTable;
- table->ColorTable = _mesa_ColorTable;
+ table->ColorSubTable = save_ColorSubTable;
+ table->ColorTable = save_ColorTable;
table->ColorTableParameterfv = _mesa_ColorTableParameterfv;
table->ColorTableParameteriv = _mesa_ColorTableParameteriv;
table->ConvolutionFilter1D = _mesa_ConvolutionFilter1D;
table->GetColorTableParameterfvEXT = _mesa_GetColorTableParameterfv;
table->GetColorTableParameterivEXT = _mesa_GetColorTableParameteriv;
+ /* 15. GL_SGIX_pixel_texture */
+ table->PixelTexGenSGIX = save_PixelTexGenSGIX;
+
+ /* 15. GL_SGIS_pixel_texture */
+ table->PixelTexGenParameteriSGIS = save_PixelTexGenParameteriSGIS;
+ table->PixelTexGenParameterfSGIS = save_PixelTexGenParameterfSGIS;
+ table->PixelTexGenParameterivSGIS = save_PixelTexGenParameterivSGIS;
+ table->PixelTexGenParameterfvSGIS = save_PixelTexGenParameterfvSGIS;
+ table->GetPixelTexGenParameterivSGIS = _mesa_GetPixelTexGenParameterivSGIS;
+ table->GetPixelTexGenParameterfvSGIS = _mesa_GetPixelTexGenParameterfvSGIS;
+
/* GL_EXT_compiled_vertex_array */
table->LockArraysEXT = _mesa_LockArraysEXT;
table->UnlockArraysEXT = _mesa_UnlockArraysEXT;
((struct immediate *) n[1].data)->id,
n[2].ui,
n[3].ui);
+ gl_print_cassette( (struct immediate *) n[1].data );
break;
case OPCODE_CONTINUE:
fprintf(f,"DISPLAY-LIST-CONTINUE\n");