Gölgelendiricileri derleme
Not
Bu konu, Gölgelendirici Modelleri 2 ile 5.1 arasında kullanılan FXC.EXE
derleyicisini kapsar. Shader Modeli 6 için, bunun yerine belgelenen DXC.EXE
'ı kullanırsınız 'de, dxc.exe ve dxcompiler.dllkullanma. Visual Studio, HLSL Özellik Sayfası yapılandırması için Gölgelendirici Modeli 6 seçildiğinde otomatik olarak DXC.EXE
kullanır.
Microsoft Visual Studio, C++ projenize eklediğiniz *.hlsl ve *.fx dosyalarından gölgelendirici kodu derleyebilir.
Derleme işleminin bir parçası olarak Visual Studio, HLSL gölgelendiricisi kaynak dosyalarını ikili gölgelendirici nesne dosyalarında veya üst bilgi dosyalarında tanımlanan bayt dizilerinde derlemek için fxc.exe veya dxc.exe HLSL kod derleyicisini kullanır. HLSL kod derleyicisinin projenizdeki her gölgelendirici kaynak dosyasını nasıl derlediği, o dosya için Ouput Files özelliğini nasıl belirttiğinize bağlıdır. HLSL özellik sayfaları hakkında daha fazla bilgi için bkz. HLSL Özellik Sayfaları.
Kullandığınız derleme yöntemi genellikle HLSL gölgelendiricisi kaynak dosyanızın boyutuna bağlıdır. Üst bilgiye büyük miktarda bayt kodu eklerseniz, uygulamanızın boyutunu ve ilk yükleme süresini artırırsınız. Ayrıca, gölgelendirici oluşturulduktan sonra bile tüm bayt kodunun bellekte bulunmasına zorlarsınız ve bu da kaynakları boşa harcar. Ancak bir başlık dosyasına bayt kodu eklediğinizde, kod karmaşıklığını azaltabilir ve gölgelendirici oluşturmayı basitleştirebilirsiniz.
Şimdi gölgelendirici kodunuzu derlemenin çeşitli yollarını ve gölgelendirici kodu için dosya uzantıları kurallarını inceleyelim.
- Gölgelendirici kod dosyası uzantılarını kullanma
- Dosyaları nesneye derleme zamanında derleme
- Derleme sırasında başlık dosyalarına derleme işlemi
- D3DCompileFromFile ile Derleme
- İlgili Konular
- İlgili konular
Gölgelendirici kod dosyası uzantılarını kullanma
Microsoft kuralına uymak için gölgelendirici kodunuz için şu dosya uzantılarını kullanın:
- .hlsl uzantısına sahip bir dosya Yüksek Düzey Gölgelendirme Dili (HLSL) kaynak kodunu barındırır. Eski .fx uzantısı da desteklenir, ancak genellikle eski Efektler sistemiile ilişkilendirilir.
- .cso uzantısına sahip bir dosya derlenmiş bir gölgelendirici nesnesi barındırır.
- .h uzantısına sahip bir dosya bir üst bilgi dosyasıdır, ancak gölgelendirici kod bağlamında, bu üst bilgi dosyası gölgelendirici verilerini barındıran bir bayt dizisi tanımlar. HLSL kod üst bilgileri için diğer yaygın uzantılar .hlsli ve .fxh'dir.
Yapılandırma aşamasında nesne dosyalarına dönüştürme
.hlsl dosyalarınızı ikili gölgelendirici nesne dosyalarında derlerseniz, uygulamanızın bu nesne dosyalarındaki verileri okuması (.cso bu nesne dosyaları için varsayılan uzantıdır), verileri bayt dizilerine ataması ve bu bayt dizilerinden gölgelendirici nesneleri oluşturması gerekir. Örneğin, bir köşe gölgelendiricisi oluşturmak için (ID3D11VertexShader**), derlenmiş köşe gölgelendiricisi bayt kodu içeren bir bayt dizisiyle id3D11Device::CreateVertexShaderyönteminiçağırın. Bu örnek kodda, SimpleVertexShader.hlsl dosyasının Ouput Files özelliği SimpleVertexShader.cso nesne dosyasına derlenecek şekilde belirtir.
auto vertexShaderBytecode = ReadData("SimpleVertexShader.cso");
ComPtr<ID3D11VertexShader> vertexShader;
DX::ThrowIfFailed(
m_d3dDevice->CreateVertexShader(
vertexShaderBytecode->Data,
vertexShaderBytecode->Length,
nullptr,
&vertexShader
)
Buradaki ReadData yardımcısı, geçerli çalışma dizinine ve geçerli işlemin EXE dosyasıyla aynı dizine bakar ve .cso dosyaları genellikle diğer VS derleme ürünleriyle birlikte bulunur. Örnek bir uygulama için bkz. ReadData.h .
Derleme zamanında başlık dosyalarına derleme
.hlsl dosyalarınızı üst bilgi dosyalarında tanımlanan bayt dizilerinde derlerseniz, bu üst bilgi dosyalarını kodunuz içine eklemeniz gerekir. Bu örnek kodda, PixelShader.hlsl dosyası için Output Files özelliği, PixelShader.h başlık dosyasında tanımlanmış olan g_psshader bayt dizisine derlenecek şekilde belirtilir.
namespace
{
include "PixelShader.h"
}
...
ComPtr<ID3D11PixelShader> m_pPixelShader;
hr = pDevice->CreatePixelShader(g_psshader, sizeof(g_psshader), nullptr, &m_pPixelShader);
D3DCompileFromFile ile derleme
Direct3D 11 için gölgelendirici kodunu derlemek için çalışma zamanında D3DCompileFromFile işlevini de kullanabilirsiniz. Bunun nasıl yapılacağı hakkında daha fazla bilgi için bkz. Nasıl Yapılır: Gölgelendirici derleme.
Not
Windows Mağazası uygulamaları geliştirme için D3DCompileFromFile kullanmayı destekler ancak dağıtım için desteklemez.
İlgili Konular
HLSL için Programlama Kılavuzu
İlgili konular
-
HLSL için Programlama Kılavuzu