install renderbuffer adaptors when color channel sizes need to be reduced

This commit is contained in:
Brian Paul
2006-05-19 03:40:29 +00:00
parent d2e5598cd3
commit 6a74f65c58

View File

@@ -47,6 +47,8 @@
#include "fbobject.h"
#include "renderbuffer.h"
#include "rbadaptors.h"
/* 32-bit color index format. Not a public format. */
#define COLOR_INDEX32 0x424243
@@ -2046,6 +2048,25 @@ _mesa_add_renderbuffer(struct gl_framebuffer *fb,
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.
*/
if (rb->_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;
fb->Attachment[bufferName].Renderbuffer = rb;