added support for B_RGB32

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21002 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2007-05-03 20:29:05 +00:00
parent def763251b
commit 7743c49897
2 changed files with 39 additions and 10 deletions
@@ -37,5 +37,5 @@ UseHeaders [ FDirName $(HAIKU_TOP) src kits opengl mesa ppc ] ;
Addon Mesa\ Software\ Renderer : Addon Mesa\ Software\ Renderer :
MesaSoftwareRenderer.cpp MesaSoftwareRenderer.cpp
: libGL.so libmesa.a be : libGL.so libmesa.a /system/lib/libbe.so
; ;
@@ -78,8 +78,8 @@ extern const char * color_space_name(color_space space);
/***** Read/write spans/arrays of pixels *****/ /***** Read/write spans/arrays of pixels *****/
/**********************************************************************/ /**********************************************************************/
/* 8-bit RGBA */ /* 32-bit RGBA */
#define NAME(PREFIX) PREFIX##_RGBA8 #define NAME(PREFIX) PREFIX##_RGBA32
#define RB_TYPE GLubyte #define RB_TYPE GLubyte
#define SPAN_VARS \ #define SPAN_VARS \
MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx; MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx;
@@ -103,6 +103,25 @@ extern const char * color_space_name(color_space space);
DST[ACOMP] = SRC[BE_ACOMP] DST[ACOMP] = SRC[BE_ACOMP]
#include "swrast/s_spantemp.h" #include "swrast/s_spantemp.h"
/* 32-bit RGB */
#define NAME(PREFIX) PREFIX##_RGB32
#define RB_TYPE GLubyte
#define SPAN_VARS \
MesaSoftwareRenderer *mr = (MesaSoftwareRenderer *) ctx->DriverCtx;
#define INIT_PIXEL_PTR(P, X, Y) \
GLuint *P = (GLuint *)(((GLubyte **) mr->GetRows())[Y] + (X) * 4)
#define INC_PIXEL_PTR(P) P += 1
#define STORE_PIXEL(DST, X, Y, VALUE) \
*DST = ( ((VALUE[RCOMP]) << 16) | \
((VALUE[GCOMP]) << 8) | \
((VALUE[BCOMP]) ) )
#define FETCH_PIXEL(DST, SRC) \
DST[RCOMP] = ((*SRC & 0x00ff0000) >> 16); \
DST[GCOMP] = ((*SRC & 0x0000ff00) >> 8); \
DST[BCOMP] = ((*SRC & 0x000000ff)); \
DST[ACOMP] = 0xff;
#include "swrast/s_spantemp.h"
/* 16-bit RGB */ /* 16-bit RGB */
#define NAME(PREFIX) PREFIX##_RGB16 #define NAME(PREFIX) PREFIX##_RGB16
#define RB_TYPE GLubyte #define RB_TYPE GLubyte
@@ -285,13 +304,22 @@ MesaSoftwareRenderer::LockGL()
if (cs != fColorSpace) { if (cs != fColorSpace) {
switch (cs) { switch (cs) {
case B_RGBA32: case B_RGBA32:
fRenderBuffer->GetRow = get_row_RGBA8; fRenderBuffer->GetRow = get_row_RGBA32;
fRenderBuffer->GetValues = get_values_RGBA8; fRenderBuffer->GetValues = get_values_RGBA32;
fRenderBuffer->PutRow = put_row_RGBA8; fRenderBuffer->PutRow = put_row_RGBA32;
fRenderBuffer->PutRowRGB = put_row_rgb_RGBA8; fRenderBuffer->PutRowRGB = put_row_rgb_RGBA32;
fRenderBuffer->PutMonoRow = put_mono_row_RGBA8; fRenderBuffer->PutMonoRow = put_mono_row_RGBA32;
fRenderBuffer->PutValues = put_values_RGBA8; fRenderBuffer->PutValues = put_values_RGBA32;
fRenderBuffer->PutMonoValues = put_mono_values_RGBA8; fRenderBuffer->PutMonoValues = put_mono_values_RGBA32;
break;
case B_RGB32:
fRenderBuffer->GetRow = get_row_RGB32;
fRenderBuffer->GetValues = get_values_RGB32;
fRenderBuffer->PutRow = put_row_RGB32;
fRenderBuffer->PutRowRGB = put_row_rgb_RGB32;
fRenderBuffer->PutMonoRow = put_mono_row_RGB32;
fRenderBuffer->PutValues = put_values_RGB32;
fRenderBuffer->PutMonoValues = put_mono_values_RGB32;
break; break;
case B_RGB16: case B_RGB16:
fRenderBuffer->GetRow = get_row_RGB16; fRenderBuffer->GetRow = get_row_RGB16;
@@ -303,6 +331,7 @@ MesaSoftwareRenderer::LockGL()
fRenderBuffer->PutMonoValues = put_mono_values_RGB16; fRenderBuffer->PutMonoValues = put_mono_values_RGB16;
break; break;
default: default:
fprintf(stderr, "unsupported screen color space %ld\n", cs);
debugger("unsupported OpenGL color space"); debugger("unsupported OpenGL color space");
break; break;
} }