📄 idirectfbgl_mesa.c
字号:
((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 + -