#include "fbobject.h"
#include "renderbuffer.h"
-#include "rbadaptors.h"
-
-
-/* 32-bit color index format. Not a public format. */
-#define COLOR_INDEX32 0x424243
-
/*
* Routines for get/put values in common buffer formats follow.
pixelSize = 4 * sizeof(GLubyte);
break;
case GL_RGBA16:
+ case GL_RGBA16_SNORM:
/* for accum buffer */
rb->Format = MESA_FORMAT_SIGNED_RGBA_16;
rb->DataType = GL_SHORT;
rb->PutMonoValues = put_mono_values_uint;
pixelSize = sizeof(GLuint);
break;
- case GL_COLOR_INDEX8_EXT:
- case GL_COLOR_INDEX16_EXT:
- case COLOR_INDEX32:
- rb->Format = MESA_FORMAT_CI8;
- rb->DataType = GL_UNSIGNED_BYTE;
- rb->GetPointer = get_pointer_ubyte;
- rb->GetRow = get_row_ubyte;
- rb->GetValues = get_values_ubyte;
- rb->PutRow = put_row_ubyte;
- rb->PutRowRGB = NULL;
- rb->PutMonoRow = put_mono_row_ubyte;
- rb->PutValues = put_values_ubyte;
- rb->PutMonoValues = put_mono_values_ubyte;
- pixelSize = sizeof(GLubyte);
- break;
default:
_mesa_problem(ctx, "Bad internalFormat in _mesa_soft_renderbuffer_storage");
return GL_FALSE;
/* free old buffer storage */
if (rb->Data) {
- _mesa_free(rb->Data);
+ free(rb->Data);
rb->Data = NULL;
}
rb->Width = width;
rb->Height = height;
- rb->_BaseFormat = _mesa_base_fbo_format(ctx, rb->InternalFormat);
+ rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
+ ASSERT(rb->_BaseFormat);
return GL_TRUE;
}
/* next, resize my alpha buffer */
if (arb->Data) {
- _mesa_free(arb->Data);
+ free(arb->Data);
}
- arb->Data = _mesa_malloc(width * height * sizeof(GLubyte));
+ arb->Data = malloc(width * height * sizeof(GLubyte));
if (arb->Data == NULL) {
arb->Width = 0;
arb->Height = 0;
delete_renderbuffer_alpha8(struct gl_renderbuffer *arb)
{
if (arb->Data) {
- _mesa_free(arb->Data);
+ free(arb->Data);
}
ASSERT(arb->Wrapped);
ASSERT(arb != arb->Wrapped);
arb->Wrapped->Delete(arb->Wrapped);
arb->Wrapped = NULL;
- _mesa_free(arb);
+ free(arb);
}
_mesa_delete_renderbuffer(struct gl_renderbuffer *rb)
{
if (rb->Data) {
- _mesa_free(rb->Data);
+ free(rb->Data);
}
- _mesa_free(rb);
+ free(rb);
}
}
-/**
- * Add software-based color index renderbuffers to the given framebuffer.
- * This is a helper routine for device drivers when creating a
- * window system framebuffer (not a user-created render/framebuffer).
- * Once this function is called, you can basically forget about this
- * renderbuffer; core Mesa will handle all the buffer management and
- * rendering!
- */
-GLboolean
-_mesa_add_color_index_renderbuffers(GLcontext *ctx, struct gl_framebuffer *fb,
- GLuint indexBits,
- GLboolean frontLeft, GLboolean backLeft,
- GLboolean frontRight, GLboolean backRight)
-{
- GLuint b;
-
- if (indexBits > 8) {
- _mesa_problem(ctx,
- "Unsupported bit depth in _mesa_add_color_index_renderbuffers");
- return GL_FALSE;
- }
-
- assert(MAX_COLOR_ATTACHMENTS >= 4);
-
- for (b = BUFFER_FRONT_LEFT; b <= BUFFER_BACK_RIGHT; b++) {
- struct gl_renderbuffer *rb;
-
- if (b == BUFFER_FRONT_LEFT && !frontLeft)
- continue;
- else if (b == BUFFER_BACK_LEFT && !backLeft)
- continue;
- else if (b == BUFFER_FRONT_RIGHT && !frontRight)
- continue;
- else if (b == BUFFER_BACK_RIGHT && !backRight)
- continue;
-
- assert(fb->Attachment[b].Renderbuffer == NULL);
-
- rb = _mesa_new_renderbuffer(ctx, 0);
- if (!rb) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating color buffer");
- return GL_FALSE;
- }
-
- assert(indexBits <= 8);
- rb->Format = MESA_FORMAT_CI8;
- rb->InternalFormat = GL_COLOR_INDEX;
-
- rb->AllocStorage = _mesa_soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, b, rb);
- }
-
- return GL_TRUE;
-}
-
-
/**
* Add software-based alpha renderbuffers to the given framebuffer.
* This is a helper routine for device drivers when creating a
}
rb->Format = MESA_FORMAT_SIGNED_RGBA_16;
- rb->InternalFormat = GL_RGBA16;
+ rb->InternalFormat = GL_RGBA16_SNORM;
rb->AllocStorage = _mesa_soft_renderbuffer_storage;
_mesa_add_renderbuffer(fb, BUFFER_ACCUM, rb);
GLboolean backRight = fb->Visual.stereoMode && fb->Visual.doubleBufferMode;
if (color) {
- if (fb->Visual.rgbMode) {
- assert(fb->Visual.redBits == fb->Visual.greenBits);
- assert(fb->Visual.redBits == fb->Visual.blueBits);
- _mesa_add_color_renderbuffers(NULL, fb,
- fb->Visual.redBits,
- fb->Visual.alphaBits,
- frontLeft, backLeft,
- frontRight, backRight);
- }
- else {
- _mesa_add_color_index_renderbuffers(NULL, fb,
- fb->Visual.indexBits,
- frontLeft, backLeft,
- frontRight, backRight);
- }
+ assert(fb->Visual.redBits == fb->Visual.greenBits);
+ assert(fb->Visual.redBits == fb->Visual.blueBits);
+ _mesa_add_color_renderbuffers(NULL, fb,
+ fb->Visual.redBits,
+ fb->Visual.alphaBits,
+ frontLeft, backLeft,
+ frontRight, backRight);
}
if (depth) {
}
if (accum) {
- assert(fb->Visual.rgbMode);
assert(fb->Visual.accumRedBits > 0);
assert(fb->Visual.accumGreenBits > 0);
assert(fb->Visual.accumBlueBits > 0);
}
if (aux) {
- assert(fb->Visual.rgbMode);
assert(fb->Visual.numAuxBuffers > 0);
_mesa_add_aux_renderbuffers(NULL, fb, fb->Visual.redBits,
fb->Visual.numAuxBuffers);
}
if (alpha) {
- assert(fb->Visual.rgbMode);
assert(fb->Visual.alphaBits > 0);
_mesa_add_alpha_renderbuffers(NULL, fb, fb->Visual.alphaBits,
frontLeft, backLeft,
_mesa_add_renderbuffer(struct gl_framebuffer *fb,
GLuint bufferName, struct gl_renderbuffer *rb)
{
- GLenum baseFormat;
-
assert(fb);
assert(rb);
assert(bufferName < BUFFER_COUNT);
assert(!rb->Name);
}
- /* If Mesa's compiled with deep color channels (16 or 32 bits / channel)
- * and the device driver is expecting 8-bit values (GLubyte), we can
- * use a "renderbuffer adaptor/wrapper" to do the necessary conversions.
- */
- baseFormat = _mesa_get_format_base_format(rb->Format);
- if (baseFormat == GL_RGBA) {
- if (CHAN_BITS == 16 && rb->DataType == GL_UNSIGNED_BYTE) {
- GET_CURRENT_CONTEXT(ctx);
- rb = _mesa_new_renderbuffer_16wrap8(ctx, rb);
- }
- else if (CHAN_BITS == 32 && rb->DataType == GL_UNSIGNED_BYTE) {
- GET_CURRENT_CONTEXT(ctx);
- rb = _mesa_new_renderbuffer_32wrap8(ctx, rb);
- }
- else if (CHAN_BITS == 32 && rb->DataType == GL_UNSIGNED_SHORT) {
- GET_CURRENT_CONTEXT(ctx);
- rb = _mesa_new_renderbuffer_32wrap16(ctx, rb);
- }
- }
-
fb->Attachment[bufferName].Type = GL_RENDERBUFFER_EXT;
fb->Attachment[bufferName].Complete = GL_TRUE;
_mesa_reference_renderbuffer(&fb->Attachment[bufferName].Renderbuffer, rb);