我已經開始了,我的代碼將能夠顯示一些文本的總數。我一直在加入對精靈的支持。我碰到的麻煩是,它似乎沒有認出我的HLSL。我設定了技巧,開始了它,開始了傳球,畫出了精靈,衝過他們,結束了傳球,技術。而D3D在VS輸出中帶來了這個小小的「使用FF到PS轉換器」。 VS也一樣。我並沒有試圖用我的HLSL做任何先進的事情 - 只是使用它並對它稍微熟悉一點,並確保我知道如何實現它。這是C++ 0x自動,順便說一下,所以自動類型扣除(因爲我很懶)。HLSL和ID3DXFont/ID3DXSprite
#define D3DCALL(a) { auto __ = a; if (FAILED(__)) DXTrace(__FILE__, __LINE__, __, WIDEN(#a), TRUE); }
D3DCALL(spriteeffect->SetTechnique(spritetechnique));
D3DCALL(spriteeffect->Begin(&passes, NULL));
D3DCALL(spriteeffect->BeginPass(0)); // We know this is zero.
D3DCALL(sprite->Begin(D3DXSPRITE_OBJECTSPACE | D3DXSPRITE_DO_NOT_ADDREF_TEXTURE | D3DXSPRITE_SORT_TEXTURE | D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_DEPTH_FRONTTOBACK));
RenderAndCleanUp(common->sprites);
D3DCALL(sprite->End());
D3DCALL(spriteeffect->EndPass());
D3DCALL(spriteeffect->End());
其中RenderAndCleanUp是一個簡單的模板函數,通過精靈循環,破壞那些需要是,並使其餘部分,和共>精靈是所有子畫面對象的簡單向量。由於DXTrace永遠不會關閉,我會保證沒有任何功能失敗。我還將控制面板設置爲最大調試。
我檢查了D3DXHANDLEs,它們都是非NULL。它不報告任何編譯錯誤或任何錯誤或警告。
// Contains the HLSL for sprites.
// Based on transform.fx, by Frank Luna.
// FX parameter (global variable to the shader).
uniform extern float4x4 gWVP;
// Structure
struct OutputVS
{
float4 posH : POSITION0;
float4 color : COLOR0;
};
// Vertex shader
OutputVS SpriteVS(float3 post : POSITION0,
float4 col : COLOR0)
{
// Zero out our output.
OutputVS outVS = (OutputVS)0;
outVS.posH = mul(float4(post, 1.0f), gWVP); // Transform
outVS.color = col;
// Done--return the output.
return outVS;
}
// Pixel shader - take the original colour of the pixel and just return it. Nothing fancy.
float4 SpritePS(float4 col : COLOR0) : COLOR
{
return col;
}
technique Sprite
{
pass P0
{
// Specify the vertex and pixel shader associated
// with this pass.
vertexShader = compile vs_3_0 SpriteVS();
pixelShader = compile ps_3_0 SpritePS();
}
}
這是查看Direct3D9的本機C++。
「因爲我很懶」因爲你在做正確的事。 :P – GManNickG 2010-02-23 20:30:21
你似乎沒有確切地說明它如何不如你所期望的那樣工作,除非我錯過了它...... – jcoder 2010-03-19 08:42:23
因爲它們實際上沒有以任何方式加載或調用HLSL。他們只是使用FF。例如,我修改了像素着色器始終返回藍色,但沒有效果。 – DeadMG 2010-03-20 23:33:50