2013-03-10 126 views
3

我創建了一個着色器,它似乎在VS2012着色器設計器中很好地工作。它將其保存爲DGSL格式,然後導出到HLSL。使用VS2012着色器設計器創建XNA着色器

我想我能在XNA項目中使用這一點,但有兩件事情是非常新的給我,我希望有人能指出我在正確的方向:

1)每次我看到了這麼遠着色器有過這樣

technique RibbonShader 
{ 
    pass Pass0 
    { 
     VertexShader = compile vs_2_0 VertexShader(); 
     PixelShader = compile ps_2_0 PixelShader(); 
    } 
} 

段不幸的是由VS2012導出功能生成的HLSL只有一個主要功能,像這樣:

P2F main(V2P pixel) 
{ 
    // lots of stuff 
    return result; 
} 

有人可以根請詳細說明我需要做什麼來讓我的着色器(具有'main'功能的着色器)在設計器中很好地處於具有上述技術/傳遞格式的格式中?

回答

2
technique RibbonShader 
{ 
    pass Pass0 
    { 
     VertexShader = compile vs_2_0 VertexShader(); 
     PixelShader = compile ps_2_0 PixelShader(); 
    } 
} 

是使用效果框架的着色器使用的格式。着色器Visual Studio生成的只是一個具有單個主函數的頂點或像素着色器。

要將它變成效果文件,您必須添加技術部分並使用效果框架。像

V2P mainVS(...) 
{ 
    // vertex shader 
} 

P2F mainPS(V2P pixel) 
{ 
    // lots of stuff 
    return result; 
} 

technique YourTechniqueName // can be anything you choose. 
{ 
    pass Pass0 
    { 
     VertexShader = compile vs_2_0 mainVS(); 
     PixelShader = compile ps_2_0 mainPS(); 
    } 
    // can have other passes 
} 

的東西,如果你不使用效果框架,你仍然可以使用單獨的頂點/像素着色器的文件只有一個主內,讓Visual Studio中編譯它們成二進制着色器文件,然後你可以加載他們在你的應用程序。

在Visual Studio 2012中,當將着色器文件添加到項目時,會自動完成此操作。此外,當您右鍵單擊並轉到着色器文件的屬性時,您可以更改它是否爲* .fx(效果文件)或頂點/像素着色器及其着色器模型版本。

希望有所幫助。

+1

謝謝。我將補充說明,生​​成的着色器包含許多參數,其中大部分參數都被忽略,其中一些參數是必不可少的。沒有文檔指出哪些對着色器的使用很重要。沒有示例顯示如何使用這種方式生成的HLSL。 事實上,我可能是唯一已經嘗試過的人,因爲我發現DGSL導出在ANSI中是這樣做的,FX編譯器需要UNICODE,所以我必須用記事本手動轉換。它如何能夠工作我不知道。 – Dave 2013-03-13 19:01:43