Registriert: So Okt 21, 2007 14:16 Beiträge: 123
Programmiersprache: Delphi
Hallo,
ich experimentiere seit einigen Tagen mit dem OGL 4.0 Betatreiber von ATI auf meiner HD 5770, speziell mit dem Tessellator. Ich habe den entsprechenden Artikel in der OpenGL Registry durchgearbeitet (http://www.opengl.org/registry/specs/ARB/tessellation_shader.txt) und bin bei meinen ersten Experimenten auf einige Probleme gestoßen. Ich habe versucht, ein einfaches Dreieck zu tessellieren. Dabei hatte ich folgende Probleme:
1. Der Tessellation Control Shader kann nicht auf die Output Arrays "gl_TessLevelOuter[]" und "gl_TessLevelInner[]" zugreifen, bei dem Versuch bekomme ich eine InvalidOperation. Dies muss aber möglich sein:
Zitat:
Tessellation Control Shader Outputs [..] Tessellation shaders additionally have two built-in per-patch output arrays, gl_TessLevelOuter[] and gl_TessLevelInner[].
2. Der Tessellation Control Shader kann keine out-Variablen setzen. Laut Registry müssen alle vertexsprezifischen "out"-Variablen als Arrays definiert sein:
Zitat:
A tessellation control shader may also declare user-defined per-vertex output variables. User-defined per-vertex output variables are declared with the qualifier "out" and have a value for each vertex in the output patch. Such variables must be declared as arrays or inside output blocks declared as arrays.
Wenn ich keine Größe für das Array angebe, bekomme ich beim Kompilieren die Meldung: " '[' array must be redeclared with a size before being indexed with a variable". Wenn ich eine beliebige Größe angebe, bekomme ich die Meldung: Input sizes are inconsistent."
3. Wenn ich den Tessellation Control Shader vewende, flimmert mein Dreieck entwerder oder erscheint überhaupt nicht.
4. Wegen der Probleme mit dem Tessellation Control Shader habe ich mich entschieden, vorerst nur Tesselation Evaluation Shader zu verwenden. Dies funktionierte auch einigermaßen, allerdings hatte ich einen sehr komischen Bug: Das tesselierte Dreieck erschien doppelt (siehe Bild unten). Dies konnte ich beheben, indem ich überprüft habe, ob die baryzentrische Koordinate im Bereich 0..1 ist (was bei dem zusätzlichen Dreieck nicht der Fall war). Texturen, Farben etc. funktionieren aber ohne Tessellation Control Shader problemlos.
Mein gekürztes Hauptprogramm:
Code:
unit u_test2;
type TForm1 = class [...]
procedure TForm1.glDraw(); begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
procedure TForm1.glInit(); var vert: array[0..8] of GLFloat; //vertex array 1 col: array[0..8] of GLFloat; //Color array 1 tex: array[0..8] of GLFloat; //TexCoord array 1 testdata1: array[0..3] of GLFloat; testdata2: array[0..1] of GLFloat; begin LoadTexture('blitz.jpg', tex0);
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.