📄 renderd3dwnd.cpp
字号:
D3DFORMAT *pZS;
switch(m_colorBufferFormat)
{
case D3DFMT_R5G6B5:
case D3DFMT_X1R5G5B5:
case D3DFMT_A1R5G5B5:
case D3DFMT_A4R4G4B4:
case D3DFMT_A8R3G3B2:
case D3DFMT_X4R4G4B4:
pZS = s_ZS16;
break;
case D3DFMT_R8G8B8:
case D3DFMT_A8R8G8B8:
case D3DFMT_X8R8G8B8:
default:
pZS = s_ZS32;
break;
}
for(i = 0; i < 7; i++)
{
if(FAILED(pEnum->CheckDeviceFormat(D3DADAPTER_DEFAULT, m_devType,
m_colorBufferFormat, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, pZS[i])))
{
continue;
}
if(FAILED(pEnum->CheckDepthStencilMatch(D3DADAPTER_DEFAULT, m_devType,
m_colorBufferFormat, m_colorBufferFormat, pZS[i])))
{
continue;
}
break;
}
if(i == 7)
{
MessageBox("Could not find suitable framebuffer/z buffer format!", "ERROR", MB_OK);
return E_FAIL;
}
m_d3dpp.AutoDepthStencilFormat = pZS[i];
m_d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;
m_d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
m_devBhv &=~(D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_HARDWARE_VERTEXPROCESSING);
if((m_devBhv & D3DCREATE_PUREDEVICE) == 0)
{
D3DCAPS8 caps;
// Query caps
hr = pEnum->GetDeviceCaps(D3DADAPTER_DEFAULT, m_devType, &caps);
if((caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) != 0)
{
DISPDBG(0,"Requested Version: " << hex << 0);
DISPDBG(0,"Device Version: " << hex << D3DSHADER_VERSION_MAJOR(caps.VertexShaderVersion));
if(D3DSHADER_VERSION_MAJOR(caps.VertexShaderVersion) < 1)
{
m_devBhv |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
m_bUseSWVP = true;
}
else
{
if (theApp.GetForceSoftwareVP())
{
m_bUseSWVP = true;
m_devBhv |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}
else
{
m_bUseSWVP = false;
m_devBhv |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
}
}
else
{
m_devBhv |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
m_bUseSWVP = true;
}
}
else
{
m_devBhv |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
assert(GetSafeHwnd());
hr = pEnum->CreateDevice(
D3DADAPTER_DEFAULT, // iAdapter
m_devType, // device type
GetSafeHwnd(), // focus
m_devBhv, // dwBehaviorFlags
&m_d3dpp, // presentation parameters
&m_pD3DDev);
if (FAILED(hr))
{
InterpretError(hr);
MessageBox("Failed to create device!", "ERROR", MB_OK);
return E_FAIL;
}
m_pD3DDev->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, m_bUseSWVP);
SAFE_RELEASE(pEnum);
hr = m_pD3DDev->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB( 0xAA, 0xAA, 0xAA ), 1.0, 0);
// Create the logo view
hr = D3DXCreateTextureFromFileEx(m_pD3DDev,
theApp.GetFilePath("media\\nvlogo.dds").c_str(),
D3DX_DEFAULT,
D3DX_DEFAULT,
1,
0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_FILTER_LINEAR,
D3DX_FILTER_LINEAR,
0,
NULL,
NULL,
&m_pLogoTexture);
if (FAILED(hr))
{
InterpretError(hr);
MessageBox("Failed to create logo texture!", "ERROR", MB_OK);
return E_FAIL;
}
// Create a big square for rendering the Logo mask
hr = m_pD3DDev->CreateVertexBuffer( 4*sizeof(TLVertex),
D3DUSAGE_WRITEONLY, D3DFVF_TLVERTEX,
D3DPOOL_MANAGED, &m_pLogoVB );
if (FAILED(hr))
{
InterpretError(hr);
MessageBox("Failed to create logo vertex buffer!", "ERROR", MB_OK);
return E_FAIL;
}
if (FAILED(ResizeLogo()))
{
InterpretError(hr);
MessageBox("Failed to create logo vertex buffer!", "ERROR", MB_OK);
return E_FAIL;
}
if (FAILED(SetupTextImage()))
{
InterpretError(hr);
MessageBox("Failed to create font", "ERROR", MB_OK);
return E_FAIL;
}
if (FAILED(SetupTextBuffer()))
{
InterpretError(hr);
MessageBox("Failed to create text VB", "ERROR", MB_OK);
return E_FAIL;
}
m_bValid = true;
return S_OK;
}
HRESULT CRenderD3DWnd::ReleaseD3D()
{
// Logo stuff
SAFE_RELEASE(m_pLogoTexture);
SAFE_RELEASE(m_pLogoVB);
// Text stuff
SAFE_RELEASE(m_pFontTexture);
FreeTextBuffer();
SAFE_RELEASE(m_pD3DDev);
return S_OK;
}
// Sets up a default set of renderstates
HRESULT CRenderD3DWnd::SetDefaultRenderstatesD3D()
{
if (!m_bValid)
return NVEFF_ERR_NOTINITIALIZED;
m_pD3DDev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
m_pD3DDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
m_pD3DDev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
m_pD3DDev->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
m_pD3DDev->SetRenderState(D3DRS_FOGENABLE, FALSE);
m_pD3DDev->SetRenderState(D3DRS_FOGCOLOR, 0xFF0000);
m_pD3DDev->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_NONE );
m_pD3DDev->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR );
m_pD3DDev->SetRenderState(D3DRS_RANGEFOGENABLE, FALSE );
m_pD3DDev->SetRenderState(D3DRS_ZENABLE, TRUE);
m_pD3DDev->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
m_pD3DDev->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
m_pD3DDev->SetRenderState(D3DRS_DITHERENABLE, TRUE);
m_pD3DDev->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
m_pD3DDev->SetRenderState(D3DRS_STENCILENABLE, FALSE);
m_pD3DDev->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
m_pD3DDev->SetRenderState(D3DRS_CLIPPING, TRUE);
m_pD3DDev->SetRenderState(D3DRS_LIGHTING, FALSE);
m_pD3DDev->SetRenderState(D3DRS_SPECULARENABLE, TRUE);
m_pD3DDev->SetRenderState(D3DRS_COLORVERTEX, FALSE);
m_pD3DDev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
m_pD3DDev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(1, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(2, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(2, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(2, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(2, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(2, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(3, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(3, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(3, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(3, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(3, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(3, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(4, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(4, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(4, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(4, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(4, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(4, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(5, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(5, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(5, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(5, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(5, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(5, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(6, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(6, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(6, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(6, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(6, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(6, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(7, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(7, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(7, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(7, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
m_pD3DDev->SetTextureStageState(7, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pD3DDev->SetTextureStageState(7, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
m_pD3DDev->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
m_pD3DDev->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
m_pD3DDev->SetTextureStageState(2, D3DTSS_TEXCOORDINDEX, 2);
m_pD3DDev->SetTextureStageState(3, D3DTSS_TEXCOORDINDEX, 3);
m_pD3DDev->SetTextureStageState(4, D3DTSS_TEXCOORDINDEX, 4);
m_pD3DDev->SetTextureStageState(5, D3DTSS_TEXCOORDINDEX, 5);
m_pD3DDev->SetTextureStageState(6, D3DTSS_TEXCOORDINDEX, 6);
m_pD3DDev->SetTextureStageState(7, D3DTSS_TEXCOORDINDEX, 7);
m_pD3DDev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(1, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(1, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(2, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(2, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(2, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(3, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(3, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(3, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(4, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(4, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(4, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(5, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(5, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(5, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(6, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(6, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(6, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(7, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(7, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(7, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDev->SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(1, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(1, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(2, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(2, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(3, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(3, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(4, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(4, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(5, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(5, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(6, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(6, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(7, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(7, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDev->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(1, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(2, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(3, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(4, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(5, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(6, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetTextureStageState(7, D3DTSS_TEXTURETRANSFORMFLAGS, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP0, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP1, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP2, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP3, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP4, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP5, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP6, 0);
m_pD3DDev->SetRenderState( D3DRS_WRAP7, 0);
m_pD3DDev->SetTexture(0, NULL);
m_pD3DDev->SetTexture(1, NULL);
m_pD3DDev->SetTexture(2, NULL);
m_pD3DDev->SetTexture(3, NULL);
m_pD3DDev->SetTexture(4, NULL);
m_pD3DDev->SetTexture(5, NULL);
m_pD3DDev->SetTexture(6, NULL);
m_pD3DDev->SetTexture(7, NULL);
m_pD3DDev->SetPixelShader(0);
return S_OK;
}
HRESULT CRenderD3DWnd::DrawLogo()
{
DWORD dwVertexShader;
DWORD dwPixelShader;
UINT VBStride;
LPDIRECT3DVERTEXBUFFER8 pVB;
LPDIRECT3DBASETEXTURE8 pTexture0;
DWORD i;
if (!m_bValid)
return NVEFF_ERR_NOTINITIALIZED;
typedef struct tagRenderStates
{
D3DRENDERSTATETYPE Type;
DWORD dwValue;
DWORD dwDesiredValue;
} tRenderStates;
typedef struct tagTextureStageStates
{
D3DTEXTURESTAGESTATETYPE Type;
DWORD dwValue;
DWORD dwDesiredValue;
} tTextureStates;
tRenderStates SavedRender[] =
{
{ D3DRS_ZENABLE, 0, FALSE},
{ D3DRS_ALPHATESTENABLE, 0, TRUE },
{ D3DRS_ALPHAREF, 0, 0x80 },
{ D3DRS_ALPHAFUNC, 0, D3DCMP_GREATER},
{ D3DRS_ALPHABLENDENABLE, 0, TRUE},
{ D3DRS_SRCBLEND, 0, D3DBLEND_SRCALPHA },
{ D3DRS_DESTBLEND, 0, D3DBLEND_INVSRCALPHA },
{ D3DRS_FOGENABLE, 0, FALSE },
{ D3DRS_CULLMODE, 0, D3DCULL_NONE },
{ D3DRS_FILLMODE, 0, D3DFILL_SOLID},
{ D3DRS_WRAP0, 0, 0}
};
tTextureStates SavedTextureStage0[] =
{
{ D3DTSS_COLOROP, 0, D3DTOP_SELECTARG1 },
{ D3DTSS_COLORARG1, 0, D3DTA_TEXTURE },
{ D3DTSS_ALPHAOP, 0, D3DTOP_SELECTARG1 },
{ D3DTSS_ALPHAARG1, 0, D3DTA_TEXTURE },
{ D3DTSS_TEXCOORDINDEX, 0, 0 },
{ D3DTSS_MINFILTER, 0, D3DTEXF_LINEAR },
{ D3DTSS_MAGFILTER, 0, D3DTEXF_LINEAR },
};
tTextureStates SavedTextureStage1[] =
{
{ D3DTSS_COLOROP, 0, D3DTOP_DISABLE },
{ D3DTSS_ALPHAOP, 0, D3DTOP_DISABLE },
{ D3DTSS_TEXCOORDINDEX, 0, 1 }
};
// Save state.
// Note that a 'real' app should never do this. The effects browser has to contend with all the seperate
// plugins which may have their own state management code. To stop everyone having to coexist with the
// same state manager, we do gets and sets. This means that the EBrowser can't run on the pure device because
// of the logo.
m_pD3DDev->GetVertexShader(&dwVertexShader);
m_pD3DDev->GetPixelShader(&dwPixelShader);
m_pD3DDev->GetStreamSource(0, &pVB, &VBStride);
m_pD3DDev->GetTexture(0, &pTexture0);
for (i = 0; i < sizeof(SavedRender) / sizeof(tRenderStates); i++)
{
m_pD3DDev->GetRenderState(SavedRender[i].Type, &SavedRender[i].dwValue);
}
for (i = 0; i < sizeof(SavedTextureStage0) / sizeof(tTextureStates); i++)
{
m_pD3DDev->GetTextureStageState(0, SavedTextureStage0[i].Type, &SavedTextureStage0[i].dwValue);
}
for (i = 0; i < sizeof(SavedTextureStage1) / sizeof(tTextureStates); i++)
{
m_pD3DDev->GetTextureStageState(1, SavedTextureStage1[i].Type, &SavedTextureStage1[i].dwValue);
}
// Set state
if (dwVertexShader != D3DFVF_TLVERTEX)
m_pD3DDev->SetVertexShader(D3DFVF_TLVERTEX);
if (dwPixelShader != 0)
m_pD3DDev->SetPixelShader(0);
if (pVB != m_pLogoVB)
m_pD3DDev->SetStreamSource(0, m_pLogoVB, sizeof(TLVertex));
if (pTexture0 != m_pLogoTexture)
m_pD3DDev->SetTexture(0, m_pLogoTexture);
for (i = 0; i < sizeof(SavedRender) / sizeof(tRenderStates); i++)
{
if (SavedRender[i].dwDesiredValue != SavedRender[i].dwValue)
m_pD3DDev->SetRenderState(SavedRender[i].Type, SavedRender[i].dwDesiredValue);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -