Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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 = XscCompiler.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", shaderOutput.SourceCode); } } catch (Exception e) { Console.WriteLine(e); } } } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include "Definitions.hlsli" Texture2D tex0; SamplerState tex0Sampler { Filter = MIN_MAG_MIP_LINEAR; AddressU = Wrap; AddressV = Wrap; }; float4 pshader (VS_OUTPUT data) : SV_Target { // float4 color = tex2D(tex0, data.TextureUV); float4 color = tex0.Sample (tex0Sampler, data.TextureUV); return (color); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// GLSL Fragment Shader "pshader" // Generated by XShaderCompiler // 13/03/2017 23:16:36 #version 130 in vec4 xsv_WORLDPOS0; in vec4 xsv_NORMAL0; in vec2 xsv_TEXCOORD0; out vec4 SV_Target0; uniform sampler2D tex0; void main() { vec4 color = texture(tex0, xsv_TEXCOORD0); SV_Target0 = (color); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#version 140 varying vec4 fWorldPos; varying vec4 fNormal; varying vec2 fMultiTexCoord0; uniform sampler2D tex0; void main() { gl_FragColor = texture(tex0, fMultiTexCoord0); // gl_FragColor = vec4(fMultiTexCoord0.x, fMultiTexCoord0.y, 0.0f, 1.0f); } |
Quellcode |
|
1 2 3 |
E:\Temp\XShaderCompiler\Build\build\Debug>xsc -T frag -E pshader pixelshader_unlit.hlsl compile "pixelshader_unlit.hlsl" to "pixelshader_unlit.pshader.frag" compilation successful |
out vec4 SV_Target0?
out vec4 SV_Target0?
Macht denn das überhaupt einen Unterschied? Der Shader-Compiler dürfte doch mit Sicherheit die doppelte Zuweisung optimieren, und dann sieht's wieder aus wie Deine manuelle Version.
Mein Kenntnisstand ist, dass Fragmentshader ihre berechnete Farbe über gl_FragColor ausgeben müssen.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#version 130 sampler2D tex0; in vec2 TextureUV; out vec4 color; void main() { color = texture(tex0, TextureUV); } |
Werbeanzeige