Lisensi BSD 3-Klausul
Versi: 0.11 Alpha ( Jangan gunakan dalam kode produksi! )
Lihat file TODO.md untuk informasi lebih lanjut.
Fitur | Kemajuan | Perkataan |
---|---|---|
Shader Verteks | ~80% | Beberapa fitur bahasa masih tersisa |
Shader Kontrol Tesselasi | ~20% | Terjemahan fungsi InputPatch dan patch-konstan sedang berlangsung |
Shader Evaluasi Tesselasi | ~20% | Terjemahan OutputPatch sedang berlangsung |
Geometri Shader | ~60% | Pembuatan kode tidak lengkap |
Fragmen Shader | ~80% | Beberapa fitur bahasa masih tersisa |
Hitung Shader | ~80% | Beberapa fitur bahasa masih tersisa |
Baris perintah berikut menerjemahkan file "Example.hlsl" dengan titik masuk vertex shader "VS", dan titik masuk shader fragmen "PS":
xsc -E VS -T vert Example.hlsl -E PS -T frag Example.hlsl
Hasilnya adalah dua file shader GLSL: "Example.VS.vert" dan "Example.PS.frag".
# include < Xsc/Xsc.h >
# include < fstream >
# include < iostream >
int main ()
{
// Input file stream (use std::stringstream for in-code shaders).
auto inputStream = std::make_shared<std::ifstream>( " Example.hlsl " );
// Output file stream (GLSL vertex shader)
std::ofstream outputStream ( " Example.VS.vert " );
// Fill the shader input descriptor structure
Xsc::ShaderInput inputDesc;
inputDesc. sourceCode = inputStream;
inputDesc. shaderVersion = Xsc::InputShaderVersion::HLSL5;
inputDesc. entryPoint = " VS " ;
inputDesc. shaderTarget = Xsc::ShaderTarget::VertexShader;
// Fill the shader output descriptor structure
// Use outputDesc.options, outputDesc.formatting, and outputDesc.nameMangling for more settings
Xsc::ShaderOutput outputDesc;
outputDesc. sourceCode = &outputStream;
// Optional output log (can also be a custom class)
Xsc::StdLog log ;
// Optional shader reflection data (for shader code feedback)
Xsc::Reflection::ReflectionData reflectData;
// Translate HLSL code into GLSL
try
{
bool result = Xsc::CompileShader (inputDesc, outputDesc, & log , &reflectData);
}
catch ( const std:: exception & e)
{
std::cerr << e. what () << std::endl;
}
return 0 ;
}
using System ;
using System . IO ;
namespace Example
{
class Program
{
static void Main ( )
{
// Create instance of the XShaderCompiler
var compiler = new XscCompiler ( ) ;
// Fill the shader input descriptor structure
var inputDesc = new XscCompiler . ShaderInput ( ) ;
inputDesc . SourceCode = File . ReadAllText ( "Example.hlsl" ) ;
inputDesc . ShaderVersion = XscCompiler . InputShaderVersion . HLSL5 ;
inputDesc . EntryPoint = "VS" ;
inputDesc . Target = XscCompiler . ShaderTarget . VertexShader ;
// Fill the shader output descriptor structure
// Use outputDesc.Options, outputDesc.Formatting, and outputDesc.MameMangling for more settings
var outputDesc = new XscCompiler . ShaderOutput ( ) ;
// Optional output log (can also be a custom class)
var log = compiler . StandardLog ;
// Optional shader reflection data (for shader code feedback)
var reflectData = new XscCompiler . ReflectionData ( ) ;
// Translate HLSL code into GLSL
try
{
bool result = compiler . CompileShader ( inputDesc , outputDesc , log , reflectData ) ;
if ( result )
{
// Write output shader code
File . WriteAllText ( "Example.VS.vert" , outputDesc . SourceCode ) ;
}
}
catch ( Exception e )
{
Console . WriteLine ( e ) ;
}
}
}
}
Debugger real-time dengan UI disediakan. Meskipun debugger ini terutama digunakan untuk pengembangan kompiler itu sendiri, debugger ini juga dapat digunakan untuk ikhtisar terjemahan cepat, untuk melihat bagaimana konstruksi bahasa dikompilasi silang.
Contoh debugger waktu nyata (memerlukan wxWidgets 3.1.0 atau lebih baru):
Berikut adalah garis besar singkat perbedaan Tingkat Tinggi antara HLSL dan GLSL, yang dapat diterjemahkan oleh XShaderCompiler dengan baik:
Fitur | HSL | GLSL |
---|---|---|
Pemisahan Tekstur dan Sampler | Ya | Hanya untuk Vulkan |
Warisan Struktur | Ya | TIDAK |
Struktur Bersarang | Ya | TIDAK |
Struktur Anonim | Ya | TIDAK |
Fungsi Anggota Struktur | Ya | TIDAK |
Parameter Bawaan | Ya | TIDAK |
Intrinsik Berorientasi Objek | Ya | TIDAK |
Beberapa Titik Masuk | Ya | TIDAK |
Ketik Aliasing | Ya | TIDAK |
L-Nilai Semantik Input | Ya | TIDAK |
Konversi Tipe Implisit | Luas | Terbatas |