ShaderFile (ein PreCompiler für OpenGL Shader Code)

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
Bergmann89
Beiträge: 98
Registriert: Di 15. Nov 2011, 11:36

ShaderFile (ein PreCompiler für OpenGL Shader Code)

Beitrag von Bergmann89 »

Hey Leute,

ich habe einen PreCompiler für OpenGL shader code entwickelt. Das Projekt nennt sich: "ShaderFile". Mit ShaderFile kann man große und komplexe Shader verwalten und trotzdem relativ kleinen und einfachen ShaderCode generieren. Der generierte Code wird dann mit einem normalen OpenGL Shader Objekt interpretiert, kompiliert und gelinkt.

Hier eine kurze Übersicht über die wichtigsten Features:
- wie von einem normalen PreCompiler bekannt gibt es If-Anweisungen mit denen man einen weiteren Pfad für die Code-Generierung einfügen kann
- mit der Include-Anweisung kann man andere Datein einbinden und so seinen Code übersichtlich über mehere Datein verteilen
- mit der Class-Anweisung kann man eine klassenähnliche Struktur definieren; innerhalb einer solchen Klasse kann man dann Methoden der Elternklasse überschreiben
- mit Hilfe einer Property-Anweisung kann man Eigenschaften im ShaderCode definieren, mit denen man die Code-Generierung steuern kann. Die Werte der Eigenschaften werden dann im Anwendungs-Code gesetzt
- und vieles mehr...

Das Projekt ist komplett in FPC geschrieben und kann ohne Probleme in andere Projekte eingebunden werden. Außerdem gibt es ShaderFile als dynamische Bibliothek für Windows und Linux als 32bit und 64bit Kompilat. Die Bibliothek enthält Header-Datein für C, C++, FPC und Delphi.

Einfaches Beispiel für eine Shader-Klasse:

Code: Alles auswählen

{$CLASS Color}
    {$PROPERTY UseColorMap 'false'}
{$END}
 
{$CLASS ColorFrag $EXTENDS Color}
 
    /* you can also define code here. It will be added when the code for the class is generated */
 
    {$FUNC 'vec4' GetColor $INLINE}
        {$IF UseColorMap}
            {$VAR 'vec2' '_texCoord' 'gl_TexCoord[0].st'}
            {$UNIFORM 'sampler2D' 'uColorMap'}
            return texture2D(uColorMap, _texCoord);
        {$ELSE}
            return gl_Color;
        {$END}
    {$END}
 
    {$MAIN}
        gl_FragColor = {$CALL GetColor};
    {$END}
{$END}
 
{$CLASS ColorVert $EXTENDS Color}
    {$MAIN}
        gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
        {$IF UseColorMap}
            gl_TexCoord[0] = gl_MultiTexCoord0;
        {$ELSE}
            gl_FrontColor = gl_Color;
            gl_BackColor  = gl_Color;
        {$END}
    {$END}
{$END}


Ergebnis für ColorFrag mit UseColorMap = true:

Code: Alles auswählen

/* you can also define code here. It will be added when the code for the class is generated */
 
uniform sampler2D uColorMap;
 
vec2 _texCoord = gl_TexCoord[0].st;
 
void main(void)
{
    gl_FragColor = (texture2D(uColorMap, _texCoord));
}


Links:
Gitlab WebFrontend
Lizenz
Dokumentation (speichern unter)
Zum Meinungs-Thread

Downloads:
git clone: gitlab@git.ccs-baumann.de:bitspace/ShaderFile.git
Download lastest Source (as zip)
libShaderFile (v1.0.0.4 i386 Linux)
libShaderFile (v1.0.0.4 x86_64 Linux)
libShaderFile (v1.0.0.4 i386 Win32)
libShaderFile (v1.0.0.4 x86_64 Win64)

MfG Bergmann89.
Zuletzt geändert von Bergmann89 am Di 27. Okt 2015, 17:52, insgesamt 1-mal geändert.

Bergmann89
Beiträge: 98
Registriert: Di 15. Nov 2011, 11:36

Re: ShaderFile (ein PreCompiler für OpenGL Shader Code)

Beitrag von Bergmann89 »

Hey Leute,

hab grad ein Update (v1.0.0.3) hochgeladen. Die neue Version enthält die Möglichkeit die Shader-Files über ein Callback bzw. ein Interface zu laden. Damit ist man nicht gezwungen den ShaderCode als Datei auf der Festplatte zu lagern, sondern könnte den Code auch aus einer Datenbank, Virtuellem Dateisystem oder ähnlichem laden.

Diese Funktion war zwar im Code schon implementiert, aber noch nicht in der Bibliothek. Für diejenigen, die den Source direkt genutzt haben gibt es keine Änderungen.

Download gibts wie immer im ersten Post.

MfG Bergmann.

Bergmann89
Beiträge: 98
Registriert: Di 15. Nov 2011, 11:36

Re: ShaderFile (ein PreCompiler für OpenGL Shader Code)

Beitrag von Bergmann89 »

Hey Leute,

hab grad ein Update (v1.0.0.4) mit ein paar kleinen BugFixes hochgeladen. Links wie immer im ersten Post. Über ein bischen mehr Feedback (auch negatives wenn euch was aufgefallen ist) würde ich mich freuen, oder nutzt das Ding einfach keiner?!

MfG Bergmann.

Antworten