-/* $Id: s_context.c,v 1.15 2001/02/24 18:25:52 keithw Exp $ */
+/* $Id: s_context.c,v 1.30 2002/04/19 00:38:27 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.5
+ * Version: 4.1
*
- * Copyright (C) 1999 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2002 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"),
#include "mtypes.h"
#include "mem.h"
-#include "s_pb.h"
+#include "swrast.h"
#include "s_points.h"
#include "s_lines.h"
#include "s_triangle.h"
if (ctx->Color.BlendEnabled) RasterMask |= BLEND_BIT;
if (ctx->Depth.Test) RasterMask |= DEPTH_BIT;
if (ctx->Fog.Enabled) RasterMask |= FOG_BIT;
- if (ctx->Scissor.Enabled) RasterMask |= SCISSOR_BIT;
+ if (ctx->Scissor.Enabled) RasterMask |= CLIP_BIT;
if (ctx->Stencil.Enabled) RasterMask |= STENCIL_BIT;
if (ctx->Visual.rgbMode) {
const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask);
RasterMask |= ALPHABUF_BIT;
if ( ctx->Viewport.X < 0
- || ctx->Viewport.X + ctx->Viewport.Width > ctx->DrawBuffer->Width
+ || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width
|| ctx->Viewport.Y < 0
- || ctx->Viewport.Y + ctx->Viewport.Height > ctx->DrawBuffer->Height) {
- RasterMask |= WINCLIP_BIT;
+ || ctx->Viewport.Y + ctx->Viewport.Height > (GLint) ctx->DrawBuffer->Height) {
+ RasterMask |= CLIP_BIT;
}
if (ctx->Depth.OcclusionTest)
_SWRAST_NEW_RASTERMASK| \
_NEW_LIGHT| \
_NEW_FOG | \
- _DD_NEW_SEPERATE_SPECULAR)
+ _DD_NEW_SEPARATE_SPECULAR)
#define _SWRAST_NEW_LINE (_SWRAST_NEW_DERIVED | \
_NEW_RENDERMODE| \
_NEW_LIGHT| \
_NEW_FOG| \
_NEW_DEPTH | \
- _DD_NEW_SEPERATE_SPECULAR)
+ _DD_NEW_SEPARATE_SPECULAR)
#define _SWRAST_NEW_POINT (_SWRAST_NEW_DERIVED | \
_NEW_RENDERMODE | \
_NEW_TEXTURE | \
_NEW_LIGHT | \
_NEW_FOG | \
- _DD_NEW_SEPERATE_SPECULAR)
+ _DD_NEW_SEPARATE_SPECULAR)
#define _SWRAST_NEW_TEXTURE_SAMPLE_FUNC _NEW_TEXTURE
_swrast_validate_derived( ctx );
swrast->choose_triangle( ctx );
- if ((ctx->_TriangleCaps & DD_SEPERATE_SPECULAR) &&
+ if ((ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) &&
!ctx->Texture._ReallyEnabled) {
swrast->SpecTriangle = swrast->Triangle;
swrast->Triangle = _swrast_add_spec_terms_triangle;
_swrast_validate_derived( ctx );
swrast->choose_line( ctx );
- if ((ctx->_TriangleCaps & DD_SEPERATE_SPECULAR) &&
+ if ((ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) &&
!ctx->Texture._ReallyEnabled) {
swrast->SpecLine = swrast->Line;
swrast->Line = _swrast_add_spec_terms_line;
_swrast_validate_derived( ctx );
swrast->choose_point( ctx );
- if ((ctx->_TriangleCaps & DD_SEPERATE_SPECULAR) &&
+ if ((ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) &&
!ctx->Texture._ReallyEnabled) {
swrast->SpecPoint = swrast->Point;
swrast->Point = _swrast_add_spec_terms_point;
static void
_swrast_validate_texture_sample( GLcontext *ctx, GLuint texUnit,
const struct gl_texture_object *tObj,
- GLuint n,
- const GLfloat s[], const GLfloat t[],
- const GLfloat u[], const GLfloat lambda[],
- GLchan rgba[][4] )
+ GLuint n, GLfloat texcoords[][4],
+ const GLfloat lambda[], GLchan rgba[][4] )
{
SWcontext *swrast = SWRAST_CONTEXT(ctx);
_swrast_validate_derived( ctx );
_swrast_choose_texture_sample_func( ctx, texUnit, tObj );
- swrast->TextureSample[texUnit]( ctx, texUnit, tObj, n, s, t, u,
+ swrast->TextureSample[texUnit]( ctx, texUnit, tObj, n, texcoords,
lambda, rgba );
}
if (new_state & _SWRAST_NEW_TEXTURE_SAMPLE_FUNC)
for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
swrast->TextureSample[i] = _swrast_validate_texture_sample;
+
+
+ if (ctx->Visual.rgbMode) {
+ ASSERT(swrast->Driver.WriteRGBASpan);
+ ASSERT(swrast->Driver.WriteRGBSpan);
+ ASSERT(swrast->Driver.WriteMonoRGBASpan);
+ ASSERT(swrast->Driver.WriteRGBAPixels);
+ ASSERT(swrast->Driver.WriteMonoRGBAPixels);
+ ASSERT(swrast->Driver.ReadRGBASpan);
+ ASSERT(swrast->Driver.ReadRGBAPixels);
+ }
+ else {
+ ASSERT(swrast->Driver.WriteCI32Span);
+ ASSERT(swrast->Driver.WriteCI8Span);
+ ASSERT(swrast->Driver.WriteMonoCISpan);
+ ASSERT(swrast->Driver.WriteCI32Pixels);
+ ASSERT(swrast->Driver.WriteMonoCIPixels);
+ ASSERT(swrast->Driver.ReadCI32Span);
+ ASSERT(swrast->Driver.ReadCI32Pixels);
+ }
+
}
if (swrast->NewState & _SWRAST_NEW_RASTERMASK)
_swrast_update_rasterflags( ctx );
- if (swrast->NewState & _NEW_TEXTURE)
- swrast->_MultiTextureEnabled =
- ctx->Texture._ReallyEnabled > TEXTURE0_ANY;
-
if (swrast->NewState & _NEW_POLYGON)
_swrast_update_polygon( ctx );
}
}
-
+#define SWRAST_DEBUG 0
/* Public entrypoints: See also s_accum.c, s_bitmap.c, etc.
*/
const SWvertex *v0, const SWvertex *v1,
const SWvertex *v2, const SWvertex *v3 )
{
- SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 );
- SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v2, v3 );
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_Quad\n");
+ _swrast_print_vertex( ctx, v0 );
+ _swrast_print_vertex( ctx, v1 );
+ _swrast_print_vertex( ctx, v2 );
+ _swrast_print_vertex( ctx, v3 );
+ }
+ SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v3 );
+ SWRAST_CONTEXT(ctx)->Triangle( ctx, v1, v2, v3 );
}
void
_swrast_Triangle( GLcontext *ctx, const SWvertex *v0,
const SWvertex *v1, const SWvertex *v2 )
{
-/* fprintf(stderr, "%s\n", __FUNCTION__); */
-/* _swrast_print_vertex( ctx, v0 ); */
-/* _swrast_print_vertex( ctx, v1 ); */
-/* _swrast_print_vertex( ctx, v2 ); */
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_Triangle\n");
+ _swrast_print_vertex( ctx, v0 );
+ _swrast_print_vertex( ctx, v1 );
+ _swrast_print_vertex( ctx, v2 );
+ }
SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 );
}
void
_swrast_Line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )
{
-/* fprintf(stderr, "%s\n", __FUNCTION__); */
-/* _swrast_print_vertex( ctx, v0 ); */
-/* _swrast_print_vertex( ctx, v1 ); */
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_Line\n");
+ _swrast_print_vertex( ctx, v0 );
+ _swrast_print_vertex( ctx, v1 );
+ }
SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 );
}
void
_swrast_Point( GLcontext *ctx, const SWvertex *v0 )
{
-/* fprintf(stderr, "%s\n", __FUNCTION__); */
-/* _swrast_print_vertex( ctx, v0 ); */
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_Point\n");
+ _swrast_print_vertex( ctx, v0 );
+ }
SWRAST_CONTEXT(ctx)->Point( ctx, v0 );
}
void
_swrast_InvalidateState( GLcontext *ctx, GLuint new_state )
{
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_InvalidateState\n");
+ }
SWRAST_CONTEXT(ctx)->InvalidateState( ctx, new_state );
}
void
_swrast_ResetLineStipple( GLcontext *ctx )
{
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_ResetLineStipple\n");
+ }
SWRAST_CONTEXT(ctx)->StippleCounter = 0;
}
void
_swrast_allow_vertex_fog( GLcontext *ctx, GLboolean value )
{
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_allow_vertex_fog %d\n", value);
+ }
SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
SWRAST_CONTEXT(ctx)->AllowVertexFog = value;
}
void
_swrast_allow_pixel_fog( GLcontext *ctx, GLboolean value )
{
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_allow_pixel_fog %d\n", value);
+ }
SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
SWRAST_CONTEXT(ctx)->AllowPixelFog = value;
}
{
GLuint i;
SWcontext *swrast = (SWcontext *)CALLOC(sizeof(SWcontext));
- if (!swrast)
- return GL_FALSE;
- swrast->PB = gl_alloc_pb();
- if (!swrast->PB) {
- FREE(swrast);
- return GL_FALSE;
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_CreateContext\n");
}
+ if (!swrast)
+ return GL_FALSE;
+
swrast->NewState = ~0;
swrast->choose_point = _swrast_choose_point;
{
SWcontext *swrast = SWRAST_CONTEXT(ctx);
- FREE( swrast->PB );
+ if (SWRAST_DEBUG) {
+ fprintf(stderr, "_swrast_DestroyContext\n");
+ }
+
FREE( swrast );
ctx->swrast_context = 0;
}
+struct swrast_device_driver *
+_swrast_GetDeviceDriverReference( GLcontext *ctx )
+{
+ SWcontext *swrast = SWRAST_CONTEXT(ctx);
+ return &swrast->Driver;
+}
+
+#define SWRAST_DEBUG_VERTICES 0
+
void
_swrast_print_vertex( GLcontext *ctx, const SWvertex *v )
{
GLuint i;
- fprintf(stderr, "win %f %f %f %f\n",
- v->win[0], v->win[1], v->win[2], v->win[3]);
-
- for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
- fprintf(stderr, "texcoord[%d] %f %f %f %f\n", i,
- v->texcoord[i][0], v->texcoord[i][1],
- v->texcoord[i][2], v->texcoord[i][3]);
-
- fprintf(stderr, "color %d %d %d %d\n",
- v->color[0], v->color[1], v->color[2], v->color[3]);
- fprintf(stderr, "spec %d %d %d %d\n",
- v->specular[0], v->specular[1], v->specular[2], v->specular[3]);
- fprintf(stderr, "fog %f\n", v->fog);
- fprintf(stderr, "index %d\n", v->index);
- fprintf(stderr, "pointsize %f\n", v->pointSize);
- fprintf(stderr, "\n");
+ if (SWRAST_DEBUG_VERTICES) {
+ fprintf(stderr, "win %f %f %f %f\n",
+ v->win[0], v->win[1], v->win[2], v->win[3]);
+
+ for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
+ if (ctx->Texture.Unit[i]._ReallyEnabled)
+ fprintf(stderr, "texcoord[%d] %f %f %f %f\n", i,
+ v->texcoord[i][0], v->texcoord[i][1],
+ v->texcoord[i][2], v->texcoord[i][3]);
+
+#if CHAN_TYPE == GL_FLOAT
+ fprintf(stderr, "color %f %f %f %f\n",
+ v->color[0], v->color[1], v->color[2], v->color[3]);
+ fprintf(stderr, "spec %f %f %f %f\n",
+ v->specular[0], v->specular[1], v->specular[2], v->specular[3]);
+#else
+ fprintf(stderr, "color %d %d %d %d\n",
+ v->color[0], v->color[1], v->color[2], v->color[3]);
+ fprintf(stderr, "spec %d %d %d %d\n",
+ v->specular[0], v->specular[1], v->specular[2], v->specular[3]);
+#endif
+ fprintf(stderr, "fog %f\n", v->fog);
+ fprintf(stderr, "index %d\n", v->index);
+ fprintf(stderr, "pointsize %f\n", v->pointSize);
+ fprintf(stderr, "\n");
+ }
+}
+
+
+void
+_swrast_flush( GLcontext *ctx )
+{
+ /* no-op */
}