added support for separate read/draw buffers per context

This commit is contained in:
Brian Paul
1999-11-24 18:48:30 +00:00
parent 5bf7f47083
commit 3f02f90f94
11 changed files with 176 additions and 150 deletions

View File

@@ -1,4 +1,4 @@
/* $Id: depth.c,v 1.9 1999/11/11 01:22:26 brianp Exp $ */
/* $Id: depth.c,v 1.10 1999/11/24 18:48:31 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -747,7 +747,7 @@ void gl_read_depth_span_float( GLcontext* ctx,
scale = 1.0F / DEPTH_SCALE;
if (ctx->Buffer->Depth) {
if (ctx->DrawBuffer->Depth) {
zptr = Z_ADDRESS( ctx, x, y );
for (i=0;i<n;i++) {
depth[i] = (GLfloat) zptr[i] * scale;
@@ -772,7 +772,7 @@ void gl_read_depth_span_float( GLcontext* ctx,
void gl_read_depth_span_int( GLcontext* ctx,
GLuint n, GLint x, GLint y, GLdepth depth[] )
{
if (ctx->Buffer->Depth) {
if (ctx->DrawBuffer->Depth) {
GLdepth *zptr = Z_ADDRESS( ctx, x, y );
MEMCPY( depth, zptr, n * sizeof(GLdepth) );
}
@@ -800,16 +800,16 @@ void gl_read_depth_span_int( GLcontext* ctx,
void gl_alloc_depth_buffer( GLcontext* ctx )
{
/* deallocate current depth buffer if present */
if (ctx->Buffer->Depth) {
FREE(ctx->Buffer->Depth);
ctx->Buffer->Depth = NULL;
if (ctx->DrawBuffer->Depth) {
FREE(ctx->DrawBuffer->Depth);
ctx->DrawBuffer->Depth = NULL;
}
/* allocate new depth buffer, but don't initialize it */
ctx->Buffer->Depth = (GLdepth *) MALLOC( ctx->Buffer->Width
* ctx->Buffer->Height
ctx->DrawBuffer->Depth = (GLdepth *) MALLOC( ctx->DrawBuffer->Width
* ctx->DrawBuffer->Height
* sizeof(GLdepth) );
if (!ctx->Buffer->Depth) {
if (!ctx->DrawBuffer->Depth) {
/* out of memory */
ctx->Depth.Test = GL_FALSE;
ctx->NewState |= NEW_RASTER_OPS;
@@ -829,7 +829,7 @@ void gl_clear_depth_buffer( GLcontext* ctx )
{
GLdepth clear_value = (GLdepth) (ctx->Depth.Clear * DEPTH_SCALE);
if (ctx->Visual->DepthBits==0 || !ctx->Buffer->Depth || !ctx->Depth.Mask) {
if (ctx->Visual->DepthBits==0 || !ctx->DrawBuffer->Depth || !ctx->Depth.Mask) {
/* no depth buffer, or writing to it is disabled */
return;
}
@@ -841,9 +841,9 @@ void gl_clear_depth_buffer( GLcontext* ctx )
if (ctx->Scissor.Enabled) {
/* only clear scissor region */
GLint y;
for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
GLdepth *d = Z_ADDRESS( ctx, ctx->Buffer->Xmin, y );
GLint n = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
for (y=ctx->DrawBuffer->Ymin; y<=ctx->DrawBuffer->Ymax; y++) {
GLdepth *d = Z_ADDRESS( ctx, ctx->DrawBuffer->Xmin, y );
GLint n = ctx->DrawBuffer->Xmax - ctx->DrawBuffer->Xmin + 1;
do {
*d++ = clear_value;
n--;
@@ -854,12 +854,12 @@ void gl_clear_depth_buffer( GLcontext* ctx )
/* clear whole buffer */
if (sizeof(GLdepth)==2 && (clear_value&0xff)==(clear_value>>8)) {
/* lower and upper bytes of clear_value are same, use MEMSET */
MEMSET( ctx->Buffer->Depth, clear_value&0xff,
2*ctx->Buffer->Width*ctx->Buffer->Height);
MEMSET( ctx->DrawBuffer->Depth, clear_value&0xff,
2*ctx->DrawBuffer->Width*ctx->DrawBuffer->Height);
}
else {
GLdepth *d = ctx->Buffer->Depth;
GLint n = ctx->Buffer->Width * ctx->Buffer->Height;
GLdepth *d = ctx->DrawBuffer->Depth;
GLint n = ctx->DrawBuffer->Width * ctx->DrawBuffer->Height;
while (n>=16) {
d[0] = clear_value; d[1] = clear_value;
d[2] = clear_value; d[3] = clear_value;