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

📄 tdfx_render.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 3 页
字号:
            /*            printf("download texture image on unit %d\n", unit);            */            tdfxTMDownloadTexture(fxMesa, tObj);            ti->reloadImages = GL_FALSE;         }      }   }}/* * If scissoring is enabled, compute intersection of scissor region * with all X clip rects, resulting in new cliprect list. * If number of cliprects is zero or one, call grClipWindow to setup * the clip region.  Otherwise we'll call grClipWindow inside the * BEGIN_CLIP_LOOP macro. */void tdfxUploadClipping( tdfxContextPtr fxMesa ){   __DRIdrawablePrivate *dPriv = fxMesa->driDrawable;   assert(dPriv);   if (fxMesa->numClipRects == 0) {      /* all drawing clipped away */      fxMesa->Glide.grClipWindow(0, 0, 0, 0);   }   else if (fxMesa->numClipRects == 1) {      fxMesa->Glide.grClipWindow(fxMesa->pClipRects[0].x1,                            fxMesa->screen_height - fxMesa->pClipRects[0].y2,                            fxMesa->pClipRects[0].x2,                            fxMesa->screen_height - fxMesa->pClipRects[0].y1);   }   /* else, we'll do a cliprect loop around all drawing */   fxMesa->Glide.grDRIPosition( dPriv->x, dPriv->y, dPriv->w, dPriv->h,                                fxMesa->numClipRects, fxMesa->pClipRects );}void tdfxEmitHwStateLocked( tdfxContextPtr fxMesa ){   if ( !fxMesa->dirty )      return;   if ( fxMesa->dirty & TDFX_UPLOAD_COLOR_COMBINE ) {      if (TDFX_IS_NAPALM(fxMesa)) {         fxMesa->Glide.grColorCombineExt(fxMesa->ColorCombineExt.SourceA,                                         fxMesa->ColorCombineExt.ModeA,                                         fxMesa->ColorCombineExt.SourceB,                                         fxMesa->ColorCombineExt.ModeB,                                         fxMesa->ColorCombineExt.SourceC,                                         fxMesa->ColorCombineExt.InvertC,                                         fxMesa->ColorCombineExt.SourceD,                                         fxMesa->ColorCombineExt.InvertD,                                         fxMesa->ColorCombineExt.Shift,                                         fxMesa->ColorCombineExt.Invert);      }      else {         /* Voodoo 3 */         fxMesa->Glide.grColorCombine( fxMesa->ColorCombine.Function,                                       fxMesa->ColorCombine.Factor,                                       fxMesa->ColorCombine.Local,                                       fxMesa->ColorCombine.Other,                                       fxMesa->ColorCombine.Invert );      }      fxMesa->dirty &= ~TDFX_UPLOAD_COLOR_COMBINE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_ALPHA_COMBINE ) {      if (TDFX_IS_NAPALM(fxMesa)) {         fxMesa->Glide.grAlphaCombineExt(fxMesa->AlphaCombineExt.SourceA,                                         fxMesa->AlphaCombineExt.ModeA,                                         fxMesa->AlphaCombineExt.SourceB,                                         fxMesa->AlphaCombineExt.ModeB,                                         fxMesa->AlphaCombineExt.SourceC,                                         fxMesa->AlphaCombineExt.InvertC,                                         fxMesa->AlphaCombineExt.SourceD,                                         fxMesa->AlphaCombineExt.InvertD,                                         fxMesa->AlphaCombineExt.Shift,                                         fxMesa->AlphaCombineExt.Invert);      }      else {         /* Voodoo 3 */         fxMesa->Glide.grAlphaCombine( fxMesa->AlphaCombine.Function,                                       fxMesa->AlphaCombine.Factor,                                       fxMesa->AlphaCombine.Local,                                       fxMesa->AlphaCombine.Other,                                       fxMesa->AlphaCombine.Invert );      }      fxMesa->dirty &= ~TDFX_UPLOAD_ALPHA_COMBINE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_RENDER_BUFFER ) {      fxMesa->Glide.grRenderBuffer( fxMesa->DrawBuffer );      fxMesa->dirty &= ~TDFX_UPLOAD_RENDER_BUFFER;   }   if ( fxMesa->dirty & TDFX_UPLOAD_STIPPLE) {      fxMesa->Glide.grStipplePattern( fxMesa->Stipple.Pattern );      fxMesa->Glide.grStippleMode( fxMesa->Stipple.Mode );      fxMesa->dirty &= ~TDFX_UPLOAD_STIPPLE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_ALPHA_TEST ) {      fxMesa->Glide.grAlphaTestFunction( fxMesa->Color.AlphaFunc );      fxMesa->dirty &= ~TDFX_UPLOAD_ALPHA_TEST;   }   if ( fxMesa->dirty & TDFX_UPLOAD_ALPHA_REF ) {      fxMesa->Glide.grAlphaTestReferenceValue( fxMesa->Color.AlphaRef );      fxMesa->dirty &= ~TDFX_UPLOAD_ALPHA_REF;   }   if ( fxMesa->dirty & TDFX_UPLOAD_BLEND_FUNC ) {      if (fxMesa->Glide.grAlphaBlendFunctionExt) {         fxMesa->Glide.grAlphaBlendFunctionExt( fxMesa->Color.BlendSrcRGB,                                                fxMesa->Color.BlendDstRGB,                                                fxMesa->Color.BlendEqRGB,                                                fxMesa->Color.BlendSrcA,                                                fxMesa->Color.BlendDstA,                                                fxMesa->Color.BlendEqA );      }      else {         fxMesa->Glide.grAlphaBlendFunction( fxMesa->Color.BlendSrcRGB,                                             fxMesa->Color.BlendDstRGB,                                             fxMesa->Color.BlendSrcA,                                             fxMesa->Color.BlendDstA );      }      fxMesa->dirty &= ~TDFX_UPLOAD_BLEND_FUNC;   }   if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_MODE ) {      fxMesa->Glide.grDepthBufferMode( fxMesa->Depth.Mode );      fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_MODE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_BIAS ) {      fxMesa->Glide.grDepthBiasLevel( fxMesa->Depth.Bias );      fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_BIAS;   }   if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_FUNC ) {      fxMesa->Glide.grDepthBufferFunction( fxMesa->Depth.Func );      fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_FUNC;   }   if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_MASK ) {      fxMesa->Glide.grDepthMask( fxMesa->Depth.Mask );      fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_MASK;   }   if ( fxMesa->dirty & TDFX_UPLOAD_DITHER) {      fxMesa->Glide.grDitherMode( fxMesa->Color.Dither );   }   if ( fxMesa->dirty & TDFX_UPLOAD_FOG_MODE ) {      fxMesa->Glide.grFogMode( fxMesa->Fog.Mode );      fxMesa->dirty &= ~TDFX_UPLOAD_FOG_MODE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_FOG_COLOR ) {      fxMesa->Glide.grFogColorValue( fxMesa->Fog.Color );      fxMesa->dirty &= ~TDFX_UPLOAD_FOG_COLOR;   }   if ( fxMesa->dirty & TDFX_UPLOAD_FOG_TABLE ) {      fxMesa->Glide.grFogTable( fxMesa->Fog.Table );      fxMesa->dirty &= ~TDFX_UPLOAD_FOG_TABLE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_CULL ) {      fxMesa->Glide.grCullMode( fxMesa->CullMode );      fxMesa->dirty &= ~TDFX_UPLOAD_CULL;   }   if ( fxMesa->dirty & TDFX_UPLOAD_CLIP ) {      tdfxUploadClipping( fxMesa );      fxMesa->dirty &= ~TDFX_UPLOAD_CLIP;   }   if ( fxMesa->dirty & TDFX_UPLOAD_COLOR_MASK ) {      if ( fxMesa->Glide.grColorMaskExt           && fxMesa->glCtx->Visual.redBits == 8) {	 fxMesa->Glide.grColorMaskExt( fxMesa->Color.ColorMask[RCOMP],                                       fxMesa->Color.ColorMask[GCOMP],                                       fxMesa->Color.ColorMask[BCOMP],                                       fxMesa->Color.ColorMask[ACOMP] );      } else {	 fxMesa->Glide.grColorMask( fxMesa->Color.ColorMask[RCOMP] ||                                    fxMesa->Color.ColorMask[GCOMP] ||                                    fxMesa->Color.ColorMask[BCOMP],                                    /*fxMesa->Color.ColorMask[ACOMP]*/GL_FALSE/*[dBorca] no-no*/ );      }      fxMesa->dirty &= ~TDFX_UPLOAD_COLOR_MASK;   }   if ( fxMesa->dirty & TDFX_UPLOAD_CONSTANT_COLOR ) {      fxMesa->Glide.grConstantColorValue( fxMesa->Color.MonoColor );      fxMesa->dirty &= ~TDFX_UPLOAD_CONSTANT_COLOR;   }   if ( fxMesa->dirty & TDFX_UPLOAD_LINE ) {      if (fxMesa->glCtx->Line.SmoothFlag && fxMesa->glCtx->Line.Width == 1.0)         fxMesa->Glide.grEnable(GR_AA_ORDERED);      else         fxMesa->Glide.grDisable(GR_AA_ORDERED);      fxMesa->dirty &= ~TDFX_UPLOAD_LINE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_STENCIL ) {      if (fxMesa->glCtx->Stencil.Enabled) {         fxMesa->Glide.grEnable(GR_STENCIL_MODE_EXT);         fxMesa->Glide.grStencilOp(fxMesa->Stencil.FailFunc,                                   fxMesa->Stencil.ZFailFunc,                                   fxMesa->Stencil.ZPassFunc);         fxMesa->Glide.grStencilFunc(fxMesa->Stencil.Function,                                     fxMesa->Stencil.RefValue,                                     fxMesa->Stencil.ValueMask);         fxMesa->Glide.grStencilMask(fxMesa->Stencil.WriteMask);      }      else {         fxMesa->Glide.grDisable(GR_STENCIL_MODE_EXT);      }      fxMesa->dirty &= ~TDFX_UPLOAD_STENCIL;   }   if ( fxMesa->dirty & TDFX_UPLOAD_VERTEX_LAYOUT ) {      fxMesa->Glide.grGlideSetVertexLayout( fxMesa->layout[fxMesa->vertexFormat] );      /* [dborca] enable fogcoord */      fxMesa->Glide.grVertexLayout(GR_PARAM_FOG_EXT, TDFX_FOG_OFFSET,	 fxMesa->Fog.Mode == GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT);      fxMesa->dirty &= ~TDFX_UPLOAD_VERTEX_LAYOUT;   }   if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_ENV ) {      uploadTextureEnv(fxMesa);      fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_ENV;   }   if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_PARAMS ) {      uploadTextureParams(fxMesa);      fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_PARAMS;   }   if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_PALETTE ) {      if (fxMesa->TexPalette.Data) {         fxMesa->Glide.grTexDownloadTable(fxMesa->TexPalette.Type, fxMesa->TexPalette.Data);      }      fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_PALETTE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_SOURCE ) {      uploadTextureSource(fxMesa);      fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_SOURCE;   }   if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_IMAGES ) {      uploadTextureImages(fxMesa);      fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_IMAGES;   }   fxMesa->dirty = 0;}void tdfxInitRenderFuncs( struct dd_function_table *functions ){   functions->Clear	= tdfxClear;   functions->Finish	= tdfxFinish;   functions->Flush	= tdfxFlush;}

⌨️ 快捷键说明

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