2010-02-23 23 views
0

我已經開始了,我的代碼將能夠顯示一些文本的總數。我一直在加入對精靈的支持。我碰到的麻煩是,它似乎沒有認出我的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++。

+0

「因爲我很懶」因爲你在做正確的事。 :P – GManNickG 2010-02-23 20:30:21

+0

你似乎沒有確切地說明它如何不如你所期望的那樣工作,除非我錯過了它...... – jcoder 2010-03-19 08:42:23

+0

因爲它們實際上沒有以任何方式加載或調用HLSL。他們只是使用FF。例如,我修改了像素着色器始終返回藍色,但沒有效果。 – DeadMG 2010-03-20 23:33:50

回答

0

AFAIR D3DXSprite和D3DXFont渲染是在D3DX內部實現的。所以,它設置了自己的着色器,狀態(模擬固定功能管道)並呈現文本/精靈。所以,你的着色器和狀態對這些對象沒有影響。 你可以實現你自己的文本/精靈渲染子系統,這並不難。另一個投票是微軟正式棄用D3DX。