Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) Microsoft Corporation, 1998.
//
// MapLegcy.cpp
//
// Direct3D Reference Rasterizer - Mapping Legacy Modes to Current Functionality
//
///////////////////////////////////////////////////////////////////////////////
#include "pch.cpp"
#pragma hdrstop
//-----------------------------------------------------------------------------
//
// MapLegacyTextureFilter - Map filter state from renderstate to per-stage state.
// This is invoked when a texture is bound via the TEXTUREHANDLE renderstate,
// indicating that we are in 'legacy' texture mode. The rasterizer always
// refers to per-stage filtering control state, so in legacy mode the filtering
// controls in the renderstate are mapped into the filtering controls associated
// with the texture object bound to D3DRS_TEXTUREHANDLE.
//
//-----------------------------------------------------------------------------
void RefDev::MapLegacyTextureFilter( void ) { // first check if anisotropic filtering is enabled (indicated by the
// limit value being set to > 1) - if so then aniso filter will be used
// for linear mag filter or 'linear within map' min filter
BOOL bAnisoEnabled = ( m_dwRenderState[D3DRENDERSTATE_ANISOTROPY] > 1 );
// D3D legacy filter specifications are (XXXMIP)YYY where XXX is the
// mip filter and YYY is the filter used within an LOD
// map MAG filter - legacy support is point or linear (and maybe aniso)
switch ( m_dwRenderState[D3DRENDERSTATE_TEXTUREMAG] ) { default: case D3DFILTER_NEAREST: m_TextureStageState[0].m_dwVal[D3DTSS_MAGFILTER] = D3DTEXF_POINT; break; case D3DFILTER_LINEAR: // select based on aniso enable
m_TextureStageState[0].m_dwVal[D3DTSS_MAGFILTER] = bAnisoEnabled ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; break; } // map MIN and MIP filter at the same time - legacy support
// has them intermingled...
switch ( m_dwRenderState[D3DRENDERSTATE_TEXTUREMIN] ) { case D3DFILTER_NEAREST: m_TextureStageState[0].m_dwVal[D3DTSS_MINFILTER] = D3DTEXF_POINT; m_TextureStageState[0].m_dwVal[D3DTSS_MIPFILTER] = D3DTEXF_NONE; break; case D3DFILTER_MIPNEAREST: m_TextureStageState[0].m_dwVal[D3DTSS_MINFILTER] = D3DTEXF_POINT; m_TextureStageState[0].m_dwVal[D3DTSS_MIPFILTER] = D3DTEXF_POINT; break; case D3DFILTER_LINEARMIPNEAREST: m_TextureStageState[0].m_dwVal[D3DTSS_MINFILTER] = D3DTEXF_POINT; m_TextureStageState[0].m_dwVal[D3DTSS_MIPFILTER] = D3DTEXF_LINEAR; break; case D3DFILTER_LINEAR: // select min filter based on aniso enable
m_TextureStageState[0].m_dwVal[D3DTSS_MINFILTER] = bAnisoEnabled ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; m_TextureStageState[0].m_dwVal[D3DTSS_MIPFILTER] = D3DTEXF_NONE; break; case D3DFILTER_MIPLINEAR: // select min filter based on aniso enable
m_TextureStageState[0].m_dwVal[D3DTSS_MINFILTER] = bAnisoEnabled ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; m_TextureStageState[0].m_dwVal[D3DTSS_MIPFILTER] = D3DTEXF_POINT; break; case D3DFILTER_LINEARMIPLINEAR: // select based on aniso enable
m_TextureStageState[0].m_dwVal[D3DTSS_MINFILTER] = bAnisoEnabled ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; m_TextureStageState[0].m_dwVal[D3DTSS_MIPFILTER] = D3DTEXF_LINEAR; break; } }
//-----------------------------------------------------------------------------
//
// MapLegacyTextureBlend - Maps legacy (pre-DX6) texture blend modes to DX6
// texture blending controls. Uses per-stage program mode (first stage only).
// This mapping is done whenever the legacy TBLEND renderstate is set, and
// does overwrite any previously set DX6 texture blending controls.
//
//-----------------------------------------------------------------------------
void RefDev::MapLegacyTextureBlend( void ) { // disable texture blend processing stage 1 (this also disables subsequent stages)
m_TextureStageState[1].m_dwVal[D3DTSS_COLOROP] = D3DTOP_DISABLE;
// set texture blend processing stage 0 to match legacy mode
switch ( m_dwRenderState[D3DRENDERSTATE_TEXTUREMAPBLEND] ) { default: case D3DTBLEND_DECALMASK: // unsupported - do decal
case D3DTBLEND_DECAL: case D3DTBLEND_COPY: m_TextureStageState[0].m_dwVal[D3DTSS_COLOROP] = D3DTOP_SELECTARG1; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAOP] = D3DTOP_SELECTARG1; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG1] = D3DTA_TEXTURE; break;
case D3DTBLEND_MODULATEMASK: // unsupported - do modulate
case D3DTBLEND_MODULATE: m_TextureStageState[0].m_dwVal[D3DTSS_COLOROP] = D3DTOP_MODULATE; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG2] = D3DTA_DIFFUSE; // a special legacy alpha operation is called for that depends
// on the format of the texture
m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAOP] = D3DTOP_LEGACY_ALPHAOVR; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG2] = D3DTA_DIFFUSE; break;
case D3DTBLEND_MODULATEALPHA: m_TextureStageState[0].m_dwVal[D3DTSS_COLOROP] = D3DTOP_MODULATE; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG2] = D3DTA_DIFFUSE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAOP] = D3DTOP_MODULATE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG2] = D3DTA_DIFFUSE; break;
case D3DTBLEND_DECALALPHA: m_TextureStageState[0].m_dwVal[D3DTSS_COLOROP] = D3DTOP_BLENDTEXTUREALPHA; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG2] = D3DTA_DIFFUSE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAOP] = D3DTOP_SELECTARG2; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG2] = D3DTA_DIFFUSE; break;
case D3DTBLEND_ADD: m_TextureStageState[0].m_dwVal[D3DTSS_COLOROP] = D3DTOP_ADD; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_COLORARG2] = D3DTA_DIFFUSE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAOP] = D3DTOP_SELECTARG2; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG1] = D3DTA_TEXTURE; m_TextureStageState[0].m_dwVal[D3DTSS_ALPHAARG2] = D3DTA_DIFFUSE; break; } }
///////////////////////////////////////////////////////////////////////////////
// end
|