Du bist nicht angemeldet.

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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

11

14.03.2017, 10:55

Warum kein C++14? Die einzige Plattform, auf der man Hlsl zu Glsl konvertieren wollte, ist Windows und alle Compiler dafür unterstützen C++14.

Was meinst du mit 'alle Compiler unter Windows'?
Der Support von neuen C++ Features hängt gerade bei Visual C++ immer hinter her (im Vergleich zu gcc und clang) wie man hier sehen kann.

Außerdem ist die Übersetzung von HLSL zu GLSL besonders auf nicht-Windows Platformen interessant!
Unter Windows könnte man ja einfach Direct3D benutzen, aber gerade wegen einer Platforumunabhängigkeit habe ich ja überhaupt erst mit dem Projekt begonnen.

Genau das macht Unity übrigens auch und deren Compiler gibt es ebenfalls auf github; unterstützt aber leider nur HLSL Shader Model 3 bzw. Cg.

12

14.03.2017, 12:54

undefined

Sachen wie std::make_unique und enum class kannst du aber schon erwarten.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

13

14.03.2017, 16:46

Sachen wie std::make_unique und enum class kannst du aber schon erwarten.

Das mit std::make_unique stimmt wohl, das werde ich vermutlich auch demnächst umstellen.

enum class verwende ich schon durchgehend (außer für Flags), das ist aber auch schon seit C++11 dabei.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

14

14.03.2017, 17:33

Mein Kenntnisstand ist, dass Fragmentshader ihre berechnete Farbe über gl_FragColor ausgeben müssen.

gl_FragColor ist seit GLSL 1.30 veraltet, man kann es aber noch verwenden, wenn man will.
Seit GLSL ab Version 1.30 die varyings durch in/out Semantics abgelöst hat, deklariert man im Fragmentshader seine eigenen Fragement outputs.

Würde ich deinen Shader manuell übersetzen, könnte das z.B. so aussehen:

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);
}

Wenn du unbedingt gl_FragColor als Ausgabe haben willst, musst du dem XShaderCompiler sagen, dass er die GLSL Version 110 oder 120 erzwingen soll.
Standardmäßig ermittelt er die GLSL Version automatisch, und nimmt dabei GLSL 130 als minimal Wert.
In dem Command-Line Tool geht das mit xsc -Vout GLSL120 -T frag -E pshader pixelshader_unlit.hlsl

Gruß,
Lukas


Okay, danke. Dann ist mein GLSL veraltet.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Werbeanzeige