mal wieder "simple" 2D-Schrift
-
Hi!
folgendes Problem: Ich benutze eine Klasse, die 2D-Schrift zeichnet, indem sie jeden Buchstaben durch zwei Dreiecke darstellt (so hab ich jedenfalls den Quellcode verstanden, sieht irgendwie unglaubwürig gut aus, aber das ist nicht das Thema)Der Vertexbuffer, der benutzt wird, hat Platz für 300 Vertices. Merkwürdigerweise ist das Zeichnen aber nur erfolgreich, wenn ich die Vertices auf 72 begrenze. Hier der relevante Quellcode dazu:
[code] //So funzts if( dwNumTriangles*3 > 12*6-1/*(MAX_NUM_VERTICES-6)*/ ) { // Unlock, render, and relock the vertex buffer m_pVB->Unlock(); m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, dwNumTriangles ); pVertices = NULL; m_pVB->Lock( 0, 0, (BYTE**)&pVertices, D3DLOCK_DISCARD ); dwNumTriangles = 0L; } [/code]Das kommt aus der Schleife, die durch den String iteriert und den Vertexbuffer füllt. Das auskommentierte MAX_NUM_VERTICES entspricht der Größe des Vertexbuffers.
Wie kommt das??? An der Grafikkarte sollts IMHO nicht liegen, so schlecht ist die nun auch wieder nicht.
-
ich bin mir nicht sicher, aber sollte man nicht nachdem man den vb geunlocoked hat, ihn wieder als stream-source einstezen? ausserdem ist es nicht gut, den vb so lange zu locken, in der zeit sind andere teile des progs ausser gefecht gesetzt und die graka kann nicht mehr viel machen so weit ich weiß. Also:
lock - daten rein - unlock
setsrreamsourde
rendervielleicht gehts dann
-
So nochmal:
Der Quellcode, den ich gepostet habe, stammt aus einer Schleife, nach deren Abschluss gezeichnet wird. Das Stück, das ich hier gepostet habe dient ursprünglich dazu, Pufferüberläufe zu verhindern, nicht mehr und nicht weniger. Der Puffer ist ausgelegt auf 50 Zeichen = 100 Dreiecke = 300 Vertices. Wenn ich weniger als 13 Zeichen zeichnen will, klappt alles wunderbar. Ab 13 Zeichen zeichnet der einfach gar nichts (allerdings nur diese Zeichen nicht). Wenn ich jetzt z.B. diesen Codeteil so abändere, dass er schon nach 13 Zeichen zeichnet und 20 zeichnen will, zeichnet er nur die letzten sieben (also am Ende der Schleife). Begrenze ich das ganze auf 12 Zeichen, klappt alles (wie gesagt) ohne Probleme. Damit sind aber nur 24% des Vertexbuffers überhaupt benutzt!!!
Woran liegt es, dass der maximal 12 Zeichen = 24 Dreiecke = 72 Vertices zeichnen kann, wo doch der Vertexbuffer für viel mehr ausgelegt ist??