Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
Texture subimage() { assert(this._pixels !is null); const ushort w = 80; const ushort h = 80; void * memory = GC.malloc(w * h * 3); GLuint Screen; glGenTextures(1, &Screen); glBindTexture(GL_TEXTURE_2D, Screen); // Daten in den Speicher, Lineares Filtering aktivieren glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, this._pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GC.free(memory); glClearColor(0.0, 0.0, 0.0,0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, w, h); glBindTexture(GL_TEXTURE_2D, Screen); this.bind(); glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); // top right glTexCoord2i(0, 1); glVertex2f(w, 0); // bottom right glTexCoord2i(1, 1); glVertex2f(w, h); // bottom left glTexCoord2i(1, 0); glVertex2f(0, h); glEnd(); glBindTexture(GL_TEXTURE_2D, Screen); glCopyTexImage2D(GL_TEXTURE_2D, 0, this._format, 0, 0, w, h, 0); // Löschen des Color-Buffers. Deaktiviert sieht man eine weitere Textur unten. glClearColor(1.0, 1.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, 400, 400); glBindTexture(GL_TEXTURE_2D, Screen); const ubyte d = 5; glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(d, d); // top right glTexCoord2i(0, 1); glVertex2f(w + d, d); // bottom right glTexCoord2i(1, 1); glVertex2f(w + d, h + d); // bottom left glTexCoord2i(1, 0); glVertex2f(d, h + d); glEnd(); //glDeleteTextures(1, &Screen); //return new Texture(null, Screen, this); return null; } |
Quellcode |
|
1 |
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, this._pixels); |
Quellcode |
|
1 |
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, memory); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (19.01.2012, 12:00)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat
Wie sieht denn der Output nach dem ersten Rendering aus? Stimmt der überhaupt?
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); // top right glTexCoord2i(0, 1); glVertex2f(w, 0); // bottom right glTexCoord2i(1, 1); glVertex2f(w, h); // bottom left glTexCoord2i(1, 0); glVertex2f(0, h); glEnd(); |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
glBegin(GL_QUADS); // bottom left glTexCoord2i(1, 0); glVertex2f(0, h); // bottom right glTexCoord2i(1, 1); glVertex2f(w, h); // top right glTexCoord2i(0, 1); glVertex2f(w, 0); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); glEnd(); |
Zitat
scheint die Textur in den Zeilen verschoben zu sein, das passiert üblicher Weise, wenn man sie falsch lädt (Speicher-"Breite" stimmt nicht mit Anzahl Daten pro Zeile überein - manche Formate haben mehr Pixel als das Bild laut Header breit ist - wegen Padding)).
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat
Wie sieht denn der Output nach dem ersten Rendering aus? Stimmt der überhaupt?
Ich mache nur das Rendering von Szene zur Textur, nichts weiter. Und das Resultat siehst du ja da oben. Oder missverstehe ich dich?
Wie sehen denn die Koordinaten dann aus? Etwa umgekehrt zu denen, mit denen ich die Original Textur vor dem kopieren zeichne?
(...)
Inwiefern drehe ich das jetzt um?
Ganz simpel, indem ich die Koordinaten von unten nach oben packe, also so (...)?
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
Texture subimage() { assert(this._pixels !is null); const ushort w = 80; const ushort h = 80; void * memory = GC.malloc(w * h * 3); GLuint Screen; glGenTextures(1, &Screen); glBindTexture(GL_TEXTURE_2D, Screen); // Daten in den Speicher, Lineares Filtering aktivieren glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, this._pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GC.free(memory); //glClearColor(0.0, 0.0, 0.0,0); //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glViewport(0, 0, w, h); //glBindTexture(GL_TEXTURE_2D, Screen); this.bind(); glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); // top right glTexCoord2i(0, 1); glVertex2f(w, 0); // bottom right glTexCoord2i(1, 1); glVertex2f(w, h); // bottom left glTexCoord2i(1, 0); glVertex2f(0, h); glEnd(); /* glBindTexture(GL_TEXTURE_2D, Screen); glCopyTexImage2D(GL_TEXTURE_2D, 0, this._format, 0, 0, w, h, 0); // Löschen des Color-Buffers. Deaktiviert sieht man eine weitere Textur unten. glClearColor(1.0, 1.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, 400, 400); glBindTexture(GL_TEXTURE_2D, Screen); const ubyte d = 5; glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(d, d); // top right glTexCoord2i(0, 1); glVertex2f(w + d, d); // bottom right glTexCoord2i(1, 1); glVertex2f(w + d, h + d); // bottom left glTexCoord2i(1, 0); glVertex2f(d, h + d); glEnd(); */ glDeleteTextures(1, &Screen); //return new Texture(null, Screen, this); return null; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Siehe Edit. Du bindest die Textur nicht nur, du weißt ihr auch neuen Inhalt zu - wozu? Und wozu das "GC.malloc" und "delete", wenn Du den Speicher gar nicht benutzt?
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
void * memory = GC.malloc(w * h * 3); GLuint Screen; glGenTextures(1, &Screen); glBindTexture(GL_TEXTURE_2D, Screen); // Daten in den Speicher, Lineares Filtering aktivieren glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, this._pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GC.free(memory); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
void * memory = GC.malloc(w * h * 4); GLuint Screen; glGenTextures(1, &Screen); glBindTexture(GL_TEXTURE_2D, Screen); // Daten in den Speicher, Lineares Filtering aktivieren glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, memory); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GC.free(memory); |
Werbeanzeige