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

📄 i830_metaops.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 2 页
字号:
/*    fprintf(stderr, "%s: TexBlendWordsUsed[0]: %d\n",  *//* 	   __FUNCTION__, i830->meta.TexBlendWordsUsed[0]); */}/* Set up an arbitary piece of memory as a rectangular texture * (including the front or back buffer). */static GLbooleanset_tex_rect_source(struct intel_context *intel,                    dri_bo *buffer,                    GLuint offset,                    GLuint pitch, GLuint height, GLenum format, GLenum type){   struct i830_context *i830 = i830_context(&intel->ctx);   GLuint *setup = i830->meta.Tex[0];   GLint numLevels = 1;   GLuint textureFormat;   GLuint cpp;   /* A full implementation of this would do the upload through    * glTexImage2d, and get all the conversion operations at that    * point.  We are restricted, but still at least have access to the    * fragment program swizzle.    */   switch (format) {   case GL_BGRA:      switch (type) {      case GL_UNSIGNED_INT_8_8_8_8_REV:      case GL_UNSIGNED_BYTE:         textureFormat = (MAPSURF_32BIT | MT_32BIT_ARGB8888);         cpp = 4;         break;      default:         return GL_FALSE;      }      break;   case GL_RGBA:      switch (type) {      case GL_UNSIGNED_INT_8_8_8_8_REV:      case GL_UNSIGNED_BYTE:         textureFormat = (MAPSURF_32BIT | MT_32BIT_ABGR8888);         cpp = 4;         break;      default:         return GL_FALSE;      }      break;   case GL_BGR:      switch (type) {      case GL_UNSIGNED_SHORT_5_6_5_REV:         textureFormat = (MAPSURF_16BIT | MT_16BIT_RGB565);         cpp = 2;         break;      default:         return GL_FALSE;      }      break;   case GL_RGB:      switch (type) {      case GL_UNSIGNED_SHORT_5_6_5:         textureFormat = (MAPSURF_16BIT | MT_16BIT_RGB565);         cpp = 2;         break;      default:         return GL_FALSE;      }      break;   default:      return GL_FALSE;   }   i830->meta.tex_buffer[0] = buffer;   i830->meta.tex_offset[0] = offset;   setup[I830_TEXREG_TM0LI] = (_3DSTATE_LOAD_STATE_IMMEDIATE_2 |                               (LOAD_TEXTURE_MAP0 << 0) | 4);   setup[I830_TEXREG_TM0S1] = (((height - 1) << TM0S1_HEIGHT_SHIFT) |                               ((pitch - 1) << TM0S1_WIDTH_SHIFT) |                               textureFormat);   setup[I830_TEXREG_TM0S2] =      (((((pitch * cpp) / 4) -         1) << TM0S2_PITCH_SHIFT) | TM0S2_CUBE_FACE_ENA_MASK);   setup[I830_TEXREG_TM0S3] =      ((((numLevels -          1) *         4) << TM0S3_MIN_MIP_SHIFT) | (FILTER_NEAREST <<                                       TM0S3_MIN_FILTER_SHIFT) |       (MIPFILTER_NONE << TM0S3_MIP_FILTER_SHIFT) | (FILTER_NEAREST <<                                                     TM0S3_MAG_FILTER_SHIFT));   setup[I830_TEXREG_CUBE] = (_3DSTATE_MAP_CUBE | MAP_UNIT(0));   setup[I830_TEXREG_MCS] = (_3DSTATE_MAP_COORD_SET_CMD |                             MAP_UNIT(0) |                             ENABLE_TEXCOORD_PARAMS |                             TEXCOORDS_ARE_IN_TEXELUNITS |                             TEXCOORDTYPE_CARTESIAN |                             ENABLE_ADDR_V_CNTL |                             TEXCOORD_ADDR_V_MODE(TEXCOORDMODE_WRAP) |                             ENABLE_ADDR_U_CNTL |                             TEXCOORD_ADDR_U_MODE(TEXCOORDMODE_WRAP));   i830->meta.emitted &= ~I830_UPLOAD_TEX(0);   return GL_TRUE;}static voidset_vertex_format(struct intel_context *intel){   struct i830_context *i830 = i830_context(&intel->ctx);   i830->meta.Ctx[I830_CTXREG_VF] = (_3DSTATE_VFT0_CMD |                                     VFT0_TEX_COUNT(1) |                                     VFT0_DIFFUSE | VFT0_XYZ);   i830->meta.Ctx[I830_CTXREG_VF2] = (_3DSTATE_VFT1_CMD |                                      VFT1_TEX0_FMT(TEXCOORDFMT_2D) |                                      VFT1_TEX1_FMT(TEXCOORDFMT_2D) |                                      VFT1_TEX2_FMT(TEXCOORDFMT_2D) |                                      VFT1_TEX3_FMT(TEXCOORDFMT_2D));   i830->meta.emitted &= ~I830_UPLOAD_CTX;}static voidmeta_import_pixel_state(struct intel_context *intel){   struct i830_context *i830 = i830_context(&intel->ctx);   i830->meta.Ctx[I830_CTXREG_STATE1] = i830->state.Ctx[I830_CTXREG_STATE1];   i830->meta.Ctx[I830_CTXREG_STATE2] = i830->state.Ctx[I830_CTXREG_STATE2];   i830->meta.Ctx[I830_CTXREG_STATE3] = i830->state.Ctx[I830_CTXREG_STATE3];   i830->meta.Ctx[I830_CTXREG_STATE4] = i830->state.Ctx[I830_CTXREG_STATE4];   i830->meta.Ctx[I830_CTXREG_STATE5] = i830->state.Ctx[I830_CTXREG_STATE5];   i830->meta.Ctx[I830_CTXREG_IALPHAB] = i830->state.Ctx[I830_CTXREG_IALPHAB];   i830->meta.Ctx[I830_CTXREG_STENCILTST] =      i830->state.Ctx[I830_CTXREG_STENCILTST];   i830->meta.Ctx[I830_CTXREG_ENABLES_1] =      i830->state.Ctx[I830_CTXREG_ENABLES_1];   i830->meta.Ctx[I830_CTXREG_ENABLES_2] =      i830->state.Ctx[I830_CTXREG_ENABLES_2];   i830->meta.Ctx[I830_CTXREG_AA] = i830->state.Ctx[I830_CTXREG_AA];   i830->meta.Ctx[I830_CTXREG_FOGCOLOR] =      i830->state.Ctx[I830_CTXREG_FOGCOLOR];   i830->meta.Ctx[I830_CTXREG_BLENDCOLOR0] =      i830->state.Ctx[I830_CTXREG_BLENDCOLOR0];   i830->meta.Ctx[I830_CTXREG_BLENDCOLOR1] =      i830->state.Ctx[I830_CTXREG_BLENDCOLOR1];   i830->meta.Ctx[I830_CTXREG_MCSB0] = i830->state.Ctx[I830_CTXREG_MCSB0];   i830->meta.Ctx[I830_CTXREG_MCSB1] = i830->state.Ctx[I830_CTXREG_MCSB1];   i830->meta.Ctx[I830_CTXREG_STATE3] &= ~CULLMODE_MASK;   i830->meta.Stipple[I830_STPREG_ST1] &= ~ST1_ENABLE;   i830->meta.emitted &= ~I830_UPLOAD_CTX;   i830->meta.Buffer[I830_DESTREG_SENABLE] =      i830->state.Buffer[I830_DESTREG_SENABLE];   i830->meta.Buffer[I830_DESTREG_SR1] = i830->state.Buffer[I830_DESTREG_SR1];   i830->meta.Buffer[I830_DESTREG_SR2] = i830->state.Buffer[I830_DESTREG_SR2];   i830->meta.emitted &= ~I830_UPLOAD_BUFFERS;}/* Select between front and back draw buffers. */static voidmeta_draw_region(struct intel_context *intel,                 struct intel_region *color_region,                 struct intel_region *depth_region){   struct i830_context *i830 = i830_context(&intel->ctx);   i830_state_draw_region(intel, &i830->meta, color_region, depth_region);}/* Operations where the 3D engine is decoupled temporarily from the * current GL state and used for other purposes than simply rendering * incoming triangles. */static voidinstall_meta_state(struct intel_context *intel){   struct i830_context *i830 = i830_context(&intel->ctx);   memcpy(&i830->meta, &i830->initial, sizeof(i830->meta));   i830->meta.active = ACTIVE;   i830->meta.emitted = 0;   SET_STATE(i830, meta);   set_vertex_format(intel);   set_no_texture(intel);}static voidleave_meta_state(struct intel_context *intel){   struct i830_context *i830 = i830_context(&intel->ctx);   intel_region_release(&i830->meta.draw_region);   intel_region_release(&i830->meta.depth_region);/*    intel_region_release(intel, &i830->meta.tex_region[0]); */   SET_STATE(i830, state);}voidi830InitMetaFuncs(struct i830_context *i830){   i830->intel.vtbl.install_meta_state = install_meta_state;   i830->intel.vtbl.leave_meta_state = leave_meta_state;   i830->intel.vtbl.meta_no_depth_write = set_no_depth_write;   i830->intel.vtbl.meta_no_stencil_write = set_no_stencil_write;   i830->intel.vtbl.meta_stencil_replace = set_stencil_replace;   i830->intel.vtbl.meta_depth_replace = set_depth_replace;   i830->intel.vtbl.meta_color_mask = set_color_mask;   i830->intel.vtbl.meta_no_texture = set_no_texture;   i830->intel.vtbl.meta_texture_blend_replace = set_texture_blend_replace;   i830->intel.vtbl.meta_tex_rect_source = set_tex_rect_source;   i830->intel.vtbl.meta_draw_region = meta_draw_region;   i830->intel.vtbl.meta_import_pixel_state = meta_import_pixel_state;}

⌨️ 快捷键说明

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