首先決定暫時(shí)不考慮DX9/OGL了,我不可能在不了解一個(gè)庫(kù)的時(shí)候就給它留好接口。耽誤我挺多時(shí)間了,雖然有重大收獲……
今天的成就是把Shader啟動(dòng)起來(lái)了,做了一個(gè)花的三角形。
不管怎么說(shuō),拋棄Framework不談,本周完成界面顯示還是沒(méi)什么大問(wèn)題的。剩下的時(shí)間我還是去讀讀ConfigSystem(DXSDK里一個(gè)很囧的小球Sample)的整體結(jié)構(gòu),還有讀讀DXUT的代碼了。
如果順利的話,我也決定采用DXUT開(kāi)發(fā),因?yàn)槲覜](méi)有必要在對(duì)整體流程已經(jīng)了解的情況下,對(duì)每個(gè)細(xì)節(jié)了如指掌。我的關(guān)注點(diǎn)還是:資源管理、框架、Shader。不能偏離了學(xué)習(xí)DX的目的。
沒(méi)弄明白怎么粘圖,那就不管了,反正一個(gè)破三角形也沒(méi)什么好看的……
隨便改了改代碼,用RenderMonkey時(shí)寫的一些vs和ps的東西還記得。
另外Dx10的用于輸出的一些Semantics的名字改了:
Direct3D 10 Semantic |
Direct3D 9 Equivalent Semantic |
SV_Depth |
DEPTH |
SV_Position |
POSITION |
SV_Target |
COLOR |
不管怎么說(shuō)總是麻煩了一點(diǎn)。討厭的是RenderMonkey在我的電腦上沒(méi)裝起來(lái),不能方便的編輯shader然后輸出fx了。明天還是研究下如何輸出編譯的錯(cuò)誤信息。好歹編不過(guò)要能告訴我是哪行編不過(guò)才行……
現(xiàn)在的Shader代碼:(就隨便搞了下,顯示出一個(gè)暗紅色的怪東西:)
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float4 Color: COLOR0;
};
VS_OUTPUT VS( float4 Pos : POSITION )
{
VS_OUTPUT Output;
Output.Pos = Pos;
Output.Color = float4( 0.3f, Pos.y, Pos.x, 1.0f );
return Output;
}
struct PS_OUTPUT
{
float4 RGBColor : SV_Target; // Pixel color
};
PS_OUTPUT PS( float4 Pos : SV_POSITION,
float4 Color: COLOR0 )
{
PS_OUTPUT Output;
Output.RGBColor = Color;
return Output;
}
technique10 R0
{
pass P0
{
SetVertexShader( CompileShader( vs_4_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PS() ) );
}
}
主要是把Tutorial2里的fx拿出來(lái),把兩個(gè)輸出從單純的float4變成了一個(gè)結(jié)構(gòu)體,然后給VS的輸出增加了一個(gè)Color,最后再把坐標(biāo)的一部分當(dāng)作顏色輸出了出去。