Guten Tag zusammen
Ich bräuchte ein wenig Hilfe mit den Vertex buffern da ich noch nicht so viel Erfahrung haben mit denen.
Mein Projekt ist ein 2D-Platform-block-random-Terrain Spiel, btw.
Referenz (nicht teil des Problems):
Alles anzeigen
Das ist mein code, dieser Funktioniert einwandfrei. Auch das Format funktioniert (vertex_position und vertex_texcoord).
Das Problem ist nur das der eigentlich Dynamisch sein sollte, bez. Der vertex buffer soll in real time editierbar sein.
Natürlich ist das nicht möglich mit den built-in Funktionen von GMS 1.4
Aber vielleicht weiss hier Jemand wie sowas machbar ist.
Und wenn die einzige Möglichkeit wirklich nur mit dem vertex-shader ist, wäre diese Person bereit mir das zu erklären.
Ich hab sowas keine Ahnung von vertex-shadern. Ich komm bei fragment-shadern gut draus aber das ist mir unnütz für dieses Problem.
Fakten und Zahlen:
Den vertex Buffer jeden Frame erneuern brauch etwa 50 ms, was absolut nicht brauchbar ist.
der vertex_submit brauch etwa 3 ms (not frozen), was genügend aber nicht optimal ist.
Der vertex Buffer wird die Grösse 128 x 128 nicht überschreiten da jeder Block 16 x 16 ist, und die Auflösung maximal 1920 x 1440.
-> 16384 iterationen.
Auch Vorschläge welche nicht die Lösung sind, sind willkommen
Ich bräuchte ein wenig Hilfe mit den Vertex buffern da ich noch nicht so viel Erfahrung haben mit denen.
Mein Projekt ist ein 2D-Platform-block-random-Terrain Spiel, btw.
Referenz (nicht teil des Problems):
GML-Quellcode
- if (vertex_submitted == false)
- {
- var b = global.v_buff;
- var v = global.v_format;
- vertex_begin(b, v);
- for (var i = 0; i < 128; i++)
- {
- // get x positions
- var x1 = i * 16;
- var x2 = x1 + 16;
- for (var j = 0; j < 128; j++)
- {
- var cell = tiles[@ i, j]; // the array is either 0, 1, 2 or 3
- if (cell != 0)
- {
- var spr = lut[@ cell]; // the numbers 1, 2, 3 will declare the sprite
- var img = irandom(10); // for now random
- var vec4 = sprite_get_uvs(spr, img);
- // get y positions
- var y1 = j * 16;
- var y2 = y1 + 16;
- // 1st triangle
- vertex_position(b, x1, y1);
- vertex_texcoord(b, vec4[0], vec4[1]);
- vertex_position(b, x2, y1);
- vertex_texcoord(b, vec4[2], vec4[1]);
- vertex_position(b, x2, y2);
- vertex_texcoord(b, vec4[2], vec4[3]);
- // 2nd triangle
- vertex_position(b, x2, y2);
- vertex_texcoord(b, vec4[2], vec4[3]);
- vertex_position(b, x1, y2);
- vertex_texcoord(b, vec4[0], vec4[3]);
- vertex_position(b, x1, y1);
- vertex_texcoord(b, vec4[0], vec4[1]);
- }
- }
- }
- //terminate
- vertex_end(b);
- tex = sprite_get_texture(spr, 0);
- vertex_submitted = true;
- }
- else
- {
- vertex_submit(global.v_buff, pr_trianglelist, tex);
- }
Das ist mein code, dieser Funktioniert einwandfrei. Auch das Format funktioniert (vertex_position und vertex_texcoord).
Das Problem ist nur das der eigentlich Dynamisch sein sollte, bez. Der vertex buffer soll in real time editierbar sein.
Natürlich ist das nicht möglich mit den built-in Funktionen von GMS 1.4
Aber vielleicht weiss hier Jemand wie sowas machbar ist.
Und wenn die einzige Möglichkeit wirklich nur mit dem vertex-shader ist, wäre diese Person bereit mir das zu erklären.
Ich hab sowas keine Ahnung von vertex-shadern. Ich komm bei fragment-shadern gut draus aber das ist mir unnütz für dieses Problem.
Fakten und Zahlen:
Den vertex Buffer jeden Frame erneuern brauch etwa 50 ms, was absolut nicht brauchbar ist.
der vertex_submit brauch etwa 3 ms (not frozen), was genügend aber nicht optimal ist.
Der vertex Buffer wird die Grösse 128 x 128 nicht überschreiten da jeder Block 16 x 16 ist, und die Auflösung maximal 1920 x 1440.
-> 16384 iterationen.
Auch Vorschläge welche nicht die Lösung sind, sind willkommen
