⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idirectfbgl_mesa.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* RGB332 */#define NAME(PREFIX) PREFIX##_RGB332#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLubyte *P = data->video.end - (Y) * data->video.pitch + (X);#define INC_PIXEL_PTR(P) P += 1#define STORE_PIXEL(P, X, Y, S) \   *P = ( (((S[RCOMP]) & 0xe0)) | (((S[GCOMP]) & 0xe0) >> 3) | ((S[BCOMP]) >> 6) )#define FETCH_PIXEL(D, P) \   D[RCOMP] = ((*P & 0xe0)     ); \   D[GCOMP] = ((*P & 0x1c) << 3); \   D[BCOMP] = ((*P & 0x03) << 6); \   D[ACOMP] = 0xff#include "swrast/s_spantemp.h"/* ARGB1555 */#define NAME(PREFIX) PREFIX##_ARGB1555#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);#define INC_PIXEL_PTR(P) P += 1#define STORE_PIXEL(P, X, Y, S) \   *P = ( (((S[RCOMP]) & 0xf8) << 7) | (((S[GCOMP]) & 0xf8) << 2) | ((S[BCOMP]) >> 3) )#define FETCH_PIXEL(D, P) \   D[RCOMP] = ((*P & 0x7c00) >> 7); \   D[GCOMP] = ((*P & 0x03e0) >> 2); \   D[BCOMP] = ((*P & 0x001f) << 3); \   D[ACOMP] = ((*P & 0x8000) ? 0xff : 0)#include "swrast/s_spantemp.h"/* RGB16 */#define NAME(PREFIX) PREFIX##_RGB16#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLushort *P = (GLushort *) (data->video.end - (Y) * data->video.pitch + (X) * 2);#define INC_PIXEL_PTR(P) P += 1#define STORE_PIXEL(P, X, Y, S) \   *P = ( (((S[RCOMP]) & 0xf8) << 8) | (((S[GCOMP]) & 0xfc) << 3) | ((S[BCOMP]) >> 3) )#define FETCH_PIXEL(D, P) \   D[RCOMP] = ((*P & 0xf800) >> 8); \   D[GCOMP] = ((*P & 0x07e0) >> 3); \   D[BCOMP] = ((*P & 0x001f) << 3); \   D[ACOMP] = 0xff#include "swrast/s_spantemp.h"/* RGB24 */#define NAME(PREFIX) PREFIX##_RGB24#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLubyte *P = data->video.end - (Y) * data->video.pitch + (X) * 3;#define INC_PIXEL_PTR(P) P += 3#define STORE_PIXEL(P, X, Y, S) \   P[0] = S[BCOMP];  P[1] = S[GCOMP];  P[2] = S[BCOMP]#define FETCH_PIXEL(D, P) \   D[RCOMP] = P[2];  D[GCOMP] = P[1];  D[BCOMP] = P[0]; D[ACOMP] = 0xff#include "swrast/s_spantemp.h"/* RGB32 */#define NAME(PREFIX) PREFIX##_RGB32#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);#define INC_PIXEL_PTR(P) P += 1#define STORE_PIXEL(P, X, Y, S) \   *P = ( ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )#define FETCH_PIXEL(D, P) \   D[RCOMP] = ((*P & 0x00ff0000) >> 16); \   D[GCOMP] = ((*P & 0x0000ff00) >>  8); \   D[BCOMP] = ((*P & 0x000000ff)      ); \   D[ACOMP] = 0xff#include "swrast/s_spantemp.h"   /* ARGB */#define NAME(PREFIX) PREFIX##_ARGB#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);#define INC_PIXEL_PTR(P) P += 1#define STORE_PIXEL_RGB(P, X, Y, S) \   *P = ( 0xff000000  | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )#define STORE_PIXEL(P, X, Y, S) \   *P = ( ((S[ACOMP]) << 24) | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )#define FETCH_PIXEL(D, P) \   D[RCOMP] = ((*P & 0x00ff0000) >> 16); \   D[GCOMP] = ((*P & 0x0000ff00) >>  8); \   D[BCOMP] = ((*P & 0x000000ff)      ); \   D[ACOMP] = ((*P & 0xff000000) >> 24)#include "swrast/s_spantemp.h"/* AiRGB */#define NAME(PREFIX) PREFIX##_AiRGB#define FORMAT GL_RGBA8#define SPAN_VARS \   IDirectFBGL_data *data = (IDirectFBGL_data*) ctx->DriverCtx;#define INIT_PIXEL_PTR(P, X, Y) \   GLuint *P = (GLuint*) (data->video.end - (Y) * data->video.pitch + (X) * 4);#define INC_PIXEL_PTR(P) P += 1#define STORE_PIXEL_RGB(P, X, Y, S) \   *P = ( ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )#define STORE_PIXEL(P, X, Y, S) \   *P = ( ((0xff - (S[ACOMP])) << 24) | ((S[RCOMP]) << 16) | ((S[GCOMP]) << 8) | (S[BCOMP]) )#define FETCH_PIXEL(D, P) \   D[RCOMP] =         ((*P & 0x00ff0000) >> 16); \   D[GCOMP] =         ((*P & 0x0000ff00) >>  8); \   D[BCOMP] =         ((*P & 0x000000ff)      ); \   D[ACOMP] = (0xff - ((*P & 0xff000000) >> 24))#include "swrast/s_spantemp.h"static booldfb_mesa_setup_visual( GLvisual              *visual,                       DFBSurfacePixelFormat  format ){     GLboolean  rgbFlag        = GL_TRUE;     GLboolean  dbFlag         = GL_FALSE;     GLboolean  stereoFlag     = GL_FALSE;     GLint      redBits        = 0;     GLint      blueBits       = 0;     GLint      greenBits      = 0;     GLint      alphaBits      = 0;     GLint      indexBits      = 0;     GLint      depthBits      = 0;     GLint      stencilBits    = 0;     GLint      accumRedBits   = 0;     GLint      accumGreenBits = 0;     GLint      accumBlueBits  = 0;     GLint      accumAlphaBits = 0;     GLint      numSamples     = 0;     /* FIXME: LUT8 support. */     switch (format) {          case DSPF_RGB332:               redBits   = 3;               greenBits = 3;               blueBits  = 2;               break;          case DSPF_ARGB1555:               redBits   = 5;               greenBits = 5;               blueBits  = 5;               alphaBits = 1;               break;          case DSPF_RGB16:               redBits   = 5;               greenBits = 6;               blueBits  = 5;               break;          case DSPF_ARGB:          case DSPF_AiRGB:               alphaBits = 8;          case DSPF_RGB24:          case DSPF_RGB32:               redBits   = 8;               greenBits = 8;               blueBits  = 8;               break;          default:               D_WARN( "unsupported pixelformat" );               return false;     }     if (rgbFlag) {          accumRedBits   = redBits;          accumGreenBits = greenBits;          accumBlueBits  = blueBits;          accumAlphaBits = alphaBits;          depthBits      = redBits + greenBits + blueBits;          stencilBits    = alphaBits;     } else          depthBits      = 8;     return _mesa_initialize_visual( visual,                                     rgbFlag, dbFlag, stereoFlag,                                     redBits, greenBits, blueBits, alphaBits,                                     indexBits, depthBits, stencilBits,                                     accumRedBits, accumGreenBits,                                     accumBlueBits, accumAlphaBits,                                     numSamples );}static booldfb_mesa_create_context( GLcontext             *context,                         GLframebuffer         *framebuffer,                         GLvisual              *visual,                         DFBSurfacePixelFormat  format,                         IDirectFBGL_data      *data ){     struct dd_function_table     functions;     struct swrast_device_driver *swdd;          _mesa_initialize_framebuffer( framebuffer, visual );           _mesa_init_driver_functions( &functions );     functions.GetString     = get_string;     functions.UpdateState   = update_state;     functions.GetBufferSize = get_buffer_size;     functions.Viewport      = set_viewport;          if (!_mesa_initialize_context( context, visual, NULL,                                    &functions, (void*) data )) {          D_DEBUG( "DirectFBGL/Mesa: _mesa_initialize_context() failed.\n" );          _mesa_free_framebuffer_data( framebuffer );          return false;     }     _swrast_CreateContext( context );     _ac_CreateContext( context );     _tnl_CreateContext( context );     _swsetup_CreateContext( context );     _swsetup_Wakeup( context );          swdd = _swrast_GetDeviceDriverReference( context );     swdd->SetBuffer = set_buffer;     _mesa_init_renderbuffer( &data->render, 0 );     data->render.InternalFormat = GL_RGBA;     data->render._BaseFormat    = GL_RGBA;     data->render.DataType       = GL_UNSIGNED_BYTE;     data->render.Data           = data->video.start;     data->render.Delete         = delete_renderbuffer;     data->render.AllocStorage   = renderbuffer_storage;          switch (format) {          case DSPF_RGB332:               data->render.GetRow        = get_row_RGB332;               data->render.GetValues     = get_values_RGB332;               data->render.PutRow        = put_row_RGB332;               data->render.PutMonoRow    = put_mono_row_RGB332;               data->render.PutValues     = put_values_RGB332;               data->render.PutMonoValues = put_mono_values_RGB332;               break;          case DSPF_ARGB1555:               data->render.GetRow        = get_row_ARGB1555;               data->render.GetValues     = get_values_ARGB1555;               data->render.PutRow        = put_row_ARGB1555;               data->render.PutMonoRow    = put_mono_row_ARGB1555;               data->render.PutValues     = put_values_ARGB1555;               data->render.PutMonoValues = put_mono_values_ARGB1555;               break;          case DSPF_RGB16:               data->render.GetRow        = get_row_RGB16;               data->render.GetValues     = get_values_RGB16;               data->render.PutRow        = put_row_RGB16;               data->render.PutMonoRow    = put_mono_row_RGB16;               data->render.PutValues     = put_values_RGB16;               data->render.PutMonoValues = put_mono_values_RGB16;               break;          case DSPF_RGB24:               data->render.GetRow        = get_row_RGB24;               data->render.GetValues     = get_values_RGB24;               data->render.PutRow        = put_row_RGB24;               data->render.PutMonoRow    = put_mono_row_RGB24;               data->render.PutValues     = put_values_RGB24;               data->render.PutMonoValues = put_mono_values_RGB24;               break;          case DSPF_RGB32:               data->render.GetRow        = get_row_RGB32;               data->render.GetValues     = get_values_RGB32;               data->render.PutRow        = put_row_RGB32;               data->render.PutMonoRow    = put_mono_row_RGB32;               data->render.PutValues     = put_values_RGB32;               data->render.PutMonoValues = put_mono_values_RGB32;               break;          case DSPF_ARGB:               data->render.GetRow        = get_row_ARGB;               data->render.GetValues     = get_values_ARGB;               data->render.PutRow        = put_row_ARGB;               data->render.PutMonoRow    = put_mono_row_ARGB;               data->render.PutValues     = put_values_ARGB;               data->render.PutMonoValues = put_mono_values_ARGB;               break;          case DSPF_AiRGB:               data->render.GetRow        = get_row_AiRGB;               data->render.GetValues     = get_values_AiRGB;               data->render.PutRow        = put_row_AiRGB;               data->render.PutMonoRow    = put_mono_row_AiRGB;               data->render.PutValues     = put_values_AiRGB;               data->render.PutMonoValues = put_mono_values_AiRGB;               break;          default:               D_BUG( "unexpected pixelformat" );               return false;     }     _mesa_add_renderbuffer( framebuffer, BUFFER_FRONT_LEFT, &data->render );          _mesa_add_soft_renderbuffers( framebuffer,                                   GL_FALSE,                                   visual->haveDepthBuffer,                                   visual->haveStencilBuffer,                                   visual->haveAccumBuffer,                                   GL_FALSE,                                   GL_FALSE );     TNL_CONTEXT( context )->Driver.RunPipeline = _tnl_run_pipeline;     _mesa_enable_sw_extensions( context );     _mesa_make_current( context, framebuffer, framebuffer );          return true;}static voiddfb_mesa_destroy_context( GLcontext     *context,                          GLframebuffer *framebuffer ){     _mesa_make_current( NULL, NULL, NULL );     _mesa_free_framebuffer_data( framebuffer );     _mesa_notifyDestroy( context );     _mesa_free_context_data( context );}     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -