Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   ShaderFile (ein PreCompiler für OpenGL Shader Code) (https://www.delphipraxis.net/186763-shaderfile-ein-precompiler-fuer-opengl-shader-code.html)

Bergmann89 27. Sep 2015 18:01

ShaderFile (ein PreCompiler für OpenGL Shader Code)
 
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:
{$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:
/* 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.1 i386 Linux)
libShaderFile (v1.0.0.1 x86_64 Linux)
libShaderFile (v1.0.0.1 i386 Win32)
libShaderFile (v1.0.0.1 x86_64 Win64)

MfG Bergmann89.

Bergmann89 13. Okt 2015 19:44

AW: ShaderFile (ein PreCompiler für OpenGL Shader Code)
 
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.

€: wieso kann ich meinen ersten Post nicht editieren?! :/ Die Links stimmen, nur der angezeigte Name passt nicht.

MfG Bergmann.

Delphi-Laie 13. Okt 2015 21:32

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

Zitat von Bergmann89 (Beitrag 1318591)
€: wieso kann ich meinen ersten Post nicht editieren?! :/

Frag den Administrator Daniel, vielleicht kann er das für Dich freischalten.

Per se möglich ist es jedenfalls, wenn man im ersten Betrage wenigstens eine Datei als Anhang hochlädt.

Bergmann89 27. Okt 2015 16:56

AW: ShaderFile (ein PreCompiler für OpenGL Shader Code)
 
Hey Leute,

hab grad ein Update (v1.0.0.4) mit ein paar kleinen BugFixes hochgeladen. Links wie immer im ersten Post (auch wenn der Link noch mit 1.0.0.1 betitelt ist).
Ü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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz