Ich hab noch einen Constant-Buffer der in etwa so aussieht (hier vereinfacht):
|
C-/C++-Quelltext
|
1
2
3
4
|
cbuffer BufferText : register(b1)
{
uint Text[1024];
};
|
Da steht der Text drin. Ein Character braucht normaler Weise nur ein "unsigned char", also werden hier 4 Character pro Eintrag im Array gespeichert.
Damit kann der Text maximal 4192 Zeichen lang sein (reicht für eine Zeile Text). Dass da noch bit-weise geshiftet werden muss um aus dem 'uint' die 4 Chars raus zu lesen ignorieren wir jetzt einfach mal.
Im Geometry-Shader brauche ich die Primitive-ID nur um pro Quad zu ermitteln, welches Glyph denn nun gezeichnet werden soll.
Anhand dessen wird dann im anderen Constant-Buffer (der den Vertex-Buffer ersetzt) ausgewählt, welche Vertices benötigt werden:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
struct SVertex
{
float2 Position;
float2 TexCoord;
};
struct SGlyph
{
SVertex Vertices[4];
};
cbuffer BufferFontGlyphs : register(b2)
{
SGlyph FontGlyphs[256];
};
/* ... */
SGlyph Glyph = FontGlyphs[Text[PrimID]]; // Quasi so. Im Shader Code sieht's natürlich viel komplizierter aus ^^
|
Damit wird also Kreuz und Quer auf die Vertices zugegriffen und ich kann nicht davon ausgehen, das alle Vertices der Reihe nach dran kommen.
Also weiß ich nicht, wie ich das anders machen soll, als ich es bisher beschrieben habe.
Aber um noch mal auf die Hauptfrage zurück zukommen:
Ich werde also einen Vertex-Shader angeben, der einfach nichts tut:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
struct SDummy
{
};
SDummy VertexMain(void)
{
return (SDummy)0;
}
|