Ich denke darüber nach den Wasser Effekt für KWin zu implementieren. Da Compiz so einen Effekt hat, dachte ich mir: schau doch mal in denen ihren Code und schau dir an wie die das machen. Mir ist klar, dass ich einen Shader brauche und Compiz auch einen benutzen muss. Im besten Fall wäre es also möglich den Shader eins zu eins zu übernehmen und den Effekt recht schnell zu haben.
Also in das Quellcodeverzeichnis gegangen und nach einem Shader gesucht. Kann aber keine Shader Datei finden. Da sind überall nur c-Dateien. Schaut man halt in die c-Datei um den Pfad zum Shader zu finden – muss ja schließlich zur Laufzeit geladen werden. Und was stellt man fest? Der Shader ist in Assembler direkt im Quellcode geschrieben! Assembler! Kein Shader in der OpenGL Shading Language. Also keine Möglichkeit den Shader wiederzuverwenden, nein ich kann den Code nicht mal lesen. Wirklich Schade. Es gibt eine Hochsprache dafür und Compiz verwendet Assembler. Ich möchte hier jetzt Compiz nicht kritisieren. Es ist durchaus denkbar, dass zu dem Zeitpunkt als der Effekt geschrieben wurde, man Shader noch in Assembler schreiben musste.
Es gibt noch einen Grund fuer Assembler Shader: Grafikkarten-Treiber die noch nicht OpenGL 2.0 unterstuetzen (also GLSL) aber ansonsten das hochladen und benutzen von Shadern erlauben.
Ich hab den Shader Assembler ein bisschen kennengelernt indem ich mit NVidias cgc GLSL code in arbfp1 bzw. arbvp1 kompiliert habe und dann noch optimiert habe. cgc erzeugt scheinbar noch keinen optimalen Code. 🙁
Naja, ansonsten kannst du die Dokumentation fuer die Assembler Befehle in einem der OpenGL Extension Dokumente finden. Dann laesst sich das auch alles bald verstehen.
geht ja in die Richtung meiner Vermutung. Als Compiz geschrieben wurde, gab es wohl noch nicht genügend Treiber die GLSL unterstützten.
Ich glaube ich schreibe den Shader für Bump-Mapping schneller selbst als dass ich noch Assembler lerne 😉
Hi,
sagen wir mal so: lern’ Assembler und du gehörst zu den ganz harten Jungs. 😉
Wir bei Assembler nur schwierig mit der Portierung, wenn KDE 4.X auch für andere Prozessoren als x86 nutzen möchte…
Gruß, noisefloor
Das ist kein Assembler für x86 sondern für Grafikkarten. Außerdem hat KDE schon längst den Punkt erreicht, an dem mehr als nur x86 unterstützt wird…