Hallo zusammen,
ich hätte da folgendes Problem. Im OpenGL-Wiki steht bzgl. der
maximalen Ausgabegrößen von Geometry-Shadern:
The first limit, defined by GL_MAX_GEOMETRY_OUTPUT_VERTICES, is the maximum number that can be provided to the max_vertices output layout qualifier. [...] The other limit, defined by GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS is [...] the total number of output values (a component, in GLSL terms, is a component of a vector. So a float is one component; a vec3 is 3 components).
Der deklarative Teil meines Geometry-Shaders sieht wie folgt aus:
|
HLSL-Quelltext
|
1
2
3
|
layout( triangles ) in;
layout( triangle_strip, max_vertices = 300 ) out;
out vec4 var1;
|
Mein Vertex-Format besteht aus nur 4 Floats für die Position. Also ist es doch so, dass ich die 4 Komponenten vom Varying "var1" plus der 4 Komponenten von der Position hätte, also 8 Komponenten insgesamt pro Vertex.
Ich habe die beiden oben erwähnten Konstanten mal abgefragt:
|
C-/C++-Quelltext
|
1
2
|
GL_MAX_GEOMETRY_OUTPUT_VERTICES = 36320
GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 36321
|
Mit "max_vertices" auf 300 gesetzt würden insgesamt 8*300 = 2400 Komponenten geschrieben werden. Es ist ziemlich eindeutig, dass dieser Wert weit unter dem Limit von 36321 liegt, ebenso wie der Wert 300 für "max_vertices" weit unter 36320. Also sollte alles klappen, oder?
Wenn ich den Shader aber bauen will, scheitert das Linken:
error C6033: Hardware limitation reached, can only emit 128 vertices of this size
Kann mir jemand erklären was hier falsch läuft?