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

📄 idirectfbgl_mesa.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 3 页
字号:
          ((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 RB_TYPE GLubyte#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 RB_TYPE GLubyte#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 = ( (((S[ACOMP]) ^ 0xff) << 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) ^ 0xff)#include "swrast/s_spantemp.h"/*****************************************************************************/static booldirectfbgl_init_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_ARGB4444:               alphaBits = 4;          case DSPF_RGB444:               redBits   = 4;               greenBits = 4;               blueBits  = 4;               break;          case DSPF_ARGB2554:               alphaBits = 2;               redBits   = 5;               greenBits = 5;               blueBits  = 4;               break;          case DSPF_ARGB1555:               alphaBits = 1;          case DSPF_RGB555:               redBits   = 5;               greenBits = 5;               blueBits  = 5;               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 booldirectfbgl_create_context( GLcontext        *context,                           GLframebuffer    *framebuffer,                           GLvisual         *visual,                           IDirectFBGL_data *data ){     struct dd_function_table functions;          _mesa_initialize_framebuffer( framebuffer, visual );           _mesa_init_driver_functions( &functions );     functions.GetString     = dfbGetString;     functions.UpdateState   = dfbUpdateState;     functions.GetBufferSize = dfbGetBufferSize;     functions.Viewport      = dfbSetViewport;     functions.Clear         = dfbClear;          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 );     _vbo_CreateContext( context );     _tnl_CreateContext( context );     _swsetup_CreateContext( context );     _swsetup_Wakeup( context );     _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         = dfbDeleteRenderbuffer;     data->render.AllocStorage   = dfbRenderbufferStorage;          switch (data->format) {          case DSPF_RGB332:               data->render.GetRow        = get_row_RGB332;               data->render.GetValues     = get_values_RGB332;               data->render.PutRow        = put_row_RGB332;               data->render.PutRowRGB     = put_row_rgb_RGB332;               data->render.PutMonoRow    = put_mono_row_RGB332;               data->render.PutValues     = put_values_RGB332;               data->render.PutMonoValues = put_mono_values_RGB332;               break;          case DSPF_ARGB4444:                data->render.GetRow        = get_row_ARGB4444;               data->render.GetValues     = get_values_ARGB4444;               data->render.PutRow        = put_row_ARGB4444;               data->render.PutRowRGB     = put_row_rgb_ARGB4444;               data->render.PutMonoRow    = put_mono_row_ARGB4444;               data->render.PutValues     = put_values_ARGB4444;               data->render.PutMonoValues = put_mono_values_ARGB4444;               break;          case DSPF_RGB444:                data->render.GetRow        = get_row_RGB444;               data->render.GetValues     = get_values_RGB444;               data->render.PutRow        = put_row_RGB444;               data->render.PutRowRGB     = put_row_rgb_RGB444;               data->render.PutMonoRow    = put_mono_row_RGB444;               data->render.PutValues     = put_values_RGB444;               data->render.PutMonoValues = put_mono_values_RGB444;               break;          case DSPF_ARGB2554:                data->render.GetRow        = get_row_ARGB2554;               data->render.GetValues     = get_values_ARGB2554;               data->render.PutRow        = put_row_ARGB2554;               data->render.PutRowRGB     = put_row_rgb_ARGB2554;               data->render.PutMonoRow    = put_mono_row_ARGB2554;               data->render.PutValues     = put_values_ARGB2554;               data->render.PutMonoValues = put_mono_values_ARGB2554;               break;          case DSPF_ARGB1555:               data->render.GetRow        = get_row_ARGB1555;               data->render.GetValues     = get_values_ARGB1555;               data->render.PutRow        = put_row_ARGB1555;               data->render.PutRowRGB     = put_row_rgb_ARGB1555;               data->render.PutMonoRow    = put_mono_row_ARGB1555;               data->render.PutValues     = put_values_ARGB1555;               data->render.PutMonoValues = put_mono_values_ARGB1555;               break;          case DSPF_RGB555:               data->render.GetRow        = get_row_RGB555;               data->render.GetValues     = get_values_RGB555;               data->render.PutRow        = put_row_RGB555;               data->render.PutRowRGB     = put_row_rgb_RGB555;               data->render.PutMonoRow    = put_mono_row_RGB555;               data->render.PutValues     = put_values_RGB555;               data->render.PutMonoValues = put_mono_values_RGB555;               break;          case DSPF_RGB16:               data->render.GetRow        = get_row_RGB16;               data->render.GetValues     = get_values_RGB16;               data->render.PutRow        = put_row_RGB16;               data->render.PutRowRGB     = put_row_rgb_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.PutRowRGB     = put_row_rgb_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.PutRowRGB     = put_row_rgb_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.PutRowRGB     = put_row_rgb_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.PutRowRGB     = put_row_rgb_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;     }     data->render.Width = data->width;     data->render.Height = data->height;     _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 );          return true;}static voiddirectfbgl_destroy_context( GLcontext     *context,                            GLframebuffer *framebuffer ){     _swsetup_DestroyContext( context );     _swrast_DestroyContext( context );     _tnl_DestroyContext( context );     _vbo_DestroyContext( context );     //_mesa_free_framebuffer_data( framebuffer );     _mesa_free_context_data( context );}     

⌨️ 快捷键说明

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