Hallo alle zusammen,
Obwohl ich auch noch recht neu in der Grafikprogrammierung bin habe ich es mal gewagt mit Shadern zu hantieren. Nachdem ich schon mit GLSL die Shader aus der Shadersammlung zum laufen bekommen hatte. Von eigener Programmierung kann da noch nicht die Rede sein, wollte ich mich mal mit Hilfe des Tutorials an CG versuchen. Ich weiss, jetzt kommt vielleicht die Frage, warum ich denn nicht bei GLSL bleibe. Ganz einfach deswegen weil ich hier ein Buch mit wunderbaren Beispielen vor mir habe (Volume Rendering), jedoch alle mit CG geschrieben sind. Nun habe ich mal alles implementiert was in dem Tutorial steht. Beim Vertexshader bekomme ich keinen Fehler ausgegeben, jedoch sehe ich auch nichts auf meinem Bildschirm. Liegt womöglich an der Reihenfolge wann ich diesen verwende. Beim Fragmentshader bekomme ich, egal wie einfach das Programm geschrieben ist jedesmal einen Compilerfehler.
Hat jemand vielleicht ein Programm in delphi geschrieben, welches lesbar ist, sich an dem Tutorial orientiert und läuft. Sprich Fragmentshader und VertexShader? Das er mir und der Community zur Verfügung stellen könnte? Joachim Rohde hat ja auf seiner Seite auch immer eine Delphi Übersetzung. Nur steige ich bei Lektion 47 der CG-Vertex Shader nicht ganz durch den SourceCode, bzw. erkenne nicht was ich falsch gemacht habe.
Hier ist meine Load Routine
Code: procedure TForm1.LoadShader(ASourceType,AShaderType:integer;Filename:string); var srctype : TCGenum; begin //Quelltyp auswählen case ASourceType of assSource : srctype := CG_SOURCE; assCompiled : srctype := CG_OBJECT; end; case AShaderType of astVertex : FProfile := cgGLGetLatestProfile(CG_GL_VERTEX); astFragment : FProfile := cgGLGetLatestProfile(CG_GL_FRAGMENT); end; //Profile setzen cgGLSetOptimalOptions(FProfile); FProgram := cgCreateProgramfromFile(FContext, srctype, 'cgFragmentExample.cg', FProfile,nil, nil); CheckCgError; cgGLLoadProgram(FProgram); cgGLEnableProfile(FProfile); cgGLBindProgram(FProgram); CheckCgError; //cgGLDisableProfile(aProfile); //cgGLUnbindProgram(aProfile); end;
Der Shader sieht so aus:
Code: float4 main ( half4 primary : COLOR, half2 uv : TEXCOORD0, uniform sampler2D texture): COLOR { float4 texel = tex2D(texture,uv); return texel * primary; }
heavenssake007
Edit: läuft jetzt alles!!!
|