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

📄 brw_metaops.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
   brw->metaops.attribs.Texture->Unit[ 0 ]._ReallyEnabled = 0;   brw->state.dirty.mesa |= _NEW_TEXTURE | _NEW_PROGRAM;}static void meta_texture_blend_replace(struct intel_context *intel){   struct brw_context *brw = brw_context(&intel->ctx);   brw->metaops.attribs.Texture->CurrentUnit = 0;   brw->metaops.attribs.Texture->_EnabledUnits = 1;   brw->metaops.attribs.Texture->_EnabledCoordUnits = 1;   brw->metaops.attribs.Texture->Unit[ 0 ].Enabled = TEXTURE_2D_BIT;   brw->metaops.attribs.Texture->Unit[ 0 ]._ReallyEnabled = TEXTURE_2D_BIT;   brw->metaops.attribs.Texture->Unit[ 0 ].Current2D =      intel->frame_buffer_texobj;   brw->metaops.attribs.Texture->Unit[ 0 ]._Current =      intel->frame_buffer_texobj;   brw->state.dirty.mesa |= _NEW_TEXTURE | _NEW_PROGRAM;}static void meta_import_pixel_state(struct intel_context *intel){   struct brw_context *brw = brw_context(&intel->ctx);      RESTORE(brw, Color, _NEW_COLOR);   RESTORE(brw, Depth, _NEW_DEPTH);   RESTORE(brw, Fog, _NEW_FOG);   RESTORE(brw, Scissor, _NEW_SCISSOR);   RESTORE(brw, Stencil, _NEW_STENCIL);   RESTORE(brw, Texture, _NEW_TEXTURE);   RESTORE(brw, FragmentProgram, _NEW_PROGRAM);}static void meta_frame_buffer_texture( struct intel_context *intel,				       GLint xoff, GLint yoff ){   struct brw_context *brw = brw_context(&intel->ctx);   struct intel_region *region = intel_drawbuf_region( intel );      INSTALL(brw, FragmentProgram, _NEW_PROGRAM);   brw->metaops.attribs.FragmentProgram->_Current = brw->metaops.fp_tex;   /* This is unfortunate, but seems to be necessary, since later on we      will end up calling _mesa_load_state_parameters to lookup the      local params (below), and that will want to look in ctx.FragmentProgram      instead of brw->attribs.FragmentProgram. */   intel->ctx.FragmentProgram.Current = brw->metaops.fp_tex;   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 0 ] = xoff;   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 1 ] = yoff;   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 2 ] = 0.0;   brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 3 ] = 0.0;   brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 0 ] =      1.0 / region->pitch;   brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 1 ] =      -1.0 / region->height;   brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 2 ] = 0.0;   brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 3 ] = 1.0;      brw->state.dirty.mesa |= _NEW_PROGRAM;}static void meta_draw_region( struct intel_context *intel,			     struct intel_region *draw_region,			     struct intel_region *depth_region ){   struct brw_context *brw = brw_context(&intel->ctx);   if (!brw->metaops.saved_draw_region) {      brw->metaops.saved_draw_region = brw->state.draw_regions[0];      brw->metaops.saved_nr_draw_regions = brw->state.nr_draw_regions;      brw->metaops.saved_depth_region = brw->state.depth_region;   }   brw->state.draw_regions[0] = draw_region;   brw->state.nr_draw_regions = 1;   brw->state.depth_region = depth_region;   if (intel->frame_buffer_texobj != NULL)      brw_FrameBufferTexDestroy(brw);   if (draw_region)       brw_FrameBufferTexInit(brw, draw_region);   brw->state.dirty.mesa |= _NEW_BUFFERS;}static void meta_draw_quad(struct intel_context *intel, 			   GLfloat x0, GLfloat x1,			   GLfloat y0, GLfloat y1, 			   GLfloat z,			   GLuint color,			   GLfloat s0, GLfloat s1,			   GLfloat t0, GLfloat t1){   GLcontext *ctx = &intel->ctx;   struct brw_context *brw = brw_context(&intel->ctx);   struct gl_client_array pos_array;   struct gl_client_array color_array;   struct gl_client_array *attribs[VERT_ATTRIB_MAX];   struct _mesa_prim prim[1];   GLfloat pos[4][3];   ctx->Driver.BufferData(ctx,			  GL_ARRAY_BUFFER_ARB,			  sizeof(pos) + sizeof(color),			  NULL,			  GL_DYNAMIC_DRAW_ARB,			  brw->metaops.vbo);   pos[0][0] = x0;   pos[0][1] = y0;   pos[0][2] = z;   pos[1][0] = x1;   pos[1][1] = y0;   pos[1][2] = z;   pos[2][0] = x1;   pos[2][1] = y1;   pos[2][2] = z;   pos[3][0] = x0;   pos[3][1] = y1;   pos[3][2] = z;   ctx->Driver.BufferSubData(ctx,			     GL_ARRAY_BUFFER_ARB,			     0,			     sizeof(pos),			     pos,			     brw->metaops.vbo);   /* Convert incoming ARGB to required RGBA */   /* Note this color is stored as GL_UNSIGNED_BYTE */   color = (color & 0xff00ff00) | (((color >> 16) | (color << 16)) & 0xff00ff);   ctx->Driver.BufferSubData(ctx,			     GL_ARRAY_BUFFER_ARB,			     sizeof(pos),			     sizeof(color),			     &color,			     brw->metaops.vbo);   /* Ignoring texture coords.     */   memset(attribs, 0, VERT_ATTRIB_MAX * sizeof(*attribs));   attribs[VERT_ATTRIB_POS] = &pos_array;   attribs[VERT_ATTRIB_POS]->Ptr = 0;   attribs[VERT_ATTRIB_POS]->Type = GL_FLOAT;   attribs[VERT_ATTRIB_POS]->Enabled = 1;   attribs[VERT_ATTRIB_POS]->Size = 3;   attribs[VERT_ATTRIB_POS]->StrideB = 3 * sizeof(GLfloat);   attribs[VERT_ATTRIB_POS]->Stride = 3 * sizeof(GLfloat);   attribs[VERT_ATTRIB_POS]->_MaxElement = 4;   attribs[VERT_ATTRIB_POS]->Normalized = 0;   attribs[VERT_ATTRIB_POS]->BufferObj = brw->metaops.vbo;   attribs[VERT_ATTRIB_COLOR0] = &color_array;   attribs[VERT_ATTRIB_COLOR0]->Ptr = (const GLubyte *)sizeof(pos);   attribs[VERT_ATTRIB_COLOR0]->Type = GL_UNSIGNED_BYTE;   attribs[VERT_ATTRIB_COLOR0]->Enabled = 1;   attribs[VERT_ATTRIB_COLOR0]->Size = 4;   attribs[VERT_ATTRIB_COLOR0]->StrideB = 0;   attribs[VERT_ATTRIB_COLOR0]->Stride = 0;   attribs[VERT_ATTRIB_COLOR0]->_MaxElement = 1;   attribs[VERT_ATTRIB_COLOR0]->Normalized = 1;   attribs[VERT_ATTRIB_COLOR0]->BufferObj = brw->metaops.vbo;      /* Just ignoring texture coordinates for now.     */   memset(prim, 0, sizeof(*prim));   prim[0].mode = GL_TRIANGLE_FAN;   prim[0].begin = 1;   prim[0].end = 1;   prim[0].weak = 0;   prim[0].pad = 0;   prim[0].start = 0;   prim[0].count = 4;   brw_draw_prims(&brw->intel.ctx, 		  (const struct gl_client_array **)attribs,		  prim, 1,		  NULL,		  0,		  3 );}static void install_meta_state( struct intel_context *intel ){   GLcontext *ctx = &intel->ctx;   struct brw_context *brw = brw_context(ctx);   GLuint i;   if (!brw->metaops.vbo) {      init_metaops_state(brw);   }   install_attribs(brw);      meta_no_texture(&brw->intel);   meta_flat_shade(&brw->intel);   for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {      brw->metaops.restore_draw_buffers[i]         = ctx->DrawBuffer->_ColorDrawBufferIndexes[i];   }   brw->metaops.restore_num_draw_buffers = ctx->DrawBuffer->_NumColorDrawBuffers;   brw->metaops.restore_fp = ctx->FragmentProgram.Current;   /* This works without adjusting refcounts.  Fix later?     */   brw->metaops.saved_draw_region = brw->state.draw_regions[0];   brw->metaops.saved_nr_draw_regions = brw->state.nr_draw_regions;   brw->metaops.saved_depth_region = brw->state.depth_region;   brw->metaops.active = 1;      brw->state.dirty.brw |= BRW_NEW_METAOPS;}static void leave_meta_state( struct intel_context *intel ){   GLcontext *ctx = &intel->ctx;   struct brw_context *brw = brw_context(ctx);   GLuint i;   restore_attribs(brw);   for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {      ctx->DrawBuffer->_ColorDrawBufferIndexes[i]         = brw->metaops.restore_draw_buffers[i];   }   ctx->DrawBuffer->_NumColorDrawBuffers = brw->metaops.restore_num_draw_buffers;   ctx->FragmentProgram.Current = brw->metaops.restore_fp;   brw->state.draw_regions[0] = brw->metaops.saved_draw_region;   brw->state.nr_draw_regions = brw->metaops.saved_nr_draw_regions;   brw->state.depth_region = brw->metaops.saved_depth_region;   brw->metaops.saved_draw_region = NULL;   brw->metaops.saved_depth_region = NULL;   brw->metaops.active = 0;   brw->state.dirty.mesa |= _NEW_BUFFERS;   brw->state.dirty.brw |= BRW_NEW_METAOPS;}void brw_init_metaops( struct brw_context *brw ){   init_attribs(brw);   brw->intel.vtbl.install_meta_state = install_meta_state;   brw->intel.vtbl.leave_meta_state = leave_meta_state;   brw->intel.vtbl.meta_no_depth_write = meta_no_depth_write;   brw->intel.vtbl.meta_no_stencil_write = meta_no_stencil_write;   brw->intel.vtbl.meta_stencil_replace = meta_stencil_replace;   brw->intel.vtbl.meta_depth_replace = meta_depth_replace;   brw->intel.vtbl.meta_color_mask = meta_color_mask;   brw->intel.vtbl.meta_no_texture = meta_no_texture;   brw->intel.vtbl.meta_import_pixel_state = meta_import_pixel_state;   brw->intel.vtbl.meta_frame_buffer_texture = meta_frame_buffer_texture;   brw->intel.vtbl.meta_draw_region = meta_draw_region;   brw->intel.vtbl.meta_draw_quad = meta_draw_quad;   brw->intel.vtbl.meta_texture_blend_replace = meta_texture_blend_replace;/*    brw->intel.vtbl.meta_tex_rect_source = meta_tex_rect_source; *//*    brw->intel.vtbl.meta_draw_format = set_draw_format; */}void brw_destroy_metaops( struct brw_context *brw ){   GLcontext *ctx = &brw->intel.ctx;   if (brw->metaops.vbo)      ctx->Driver.DeleteBuffer( ctx, brw->metaops.vbo );/*    ctx->Driver.DeleteProgram( ctx, brw->metaops.fp ); *//*    ctx->Driver.DeleteProgram( ctx, brw->metaops.fp_tex ); *//*    ctx->Driver.DeleteProgram( ctx, brw->metaops.vp ); */}

⌨️ 快捷键说明

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