Moin Loite,
bei DirectX9 gibt es eine Funktion ColorFill(), mit der man eine Surface (also eine MipMap-Stufe einer Textur) mit einer Einheitsfarbe füllen kann. Gibt es dazu irgendeine Extension oder Möglichkeit bei OpenGL, ohne dass ich einen Dummy-Framebuffer dafür anlegen muss?
Bye, Thomas
[OpenGL] Textur mit Einheitsfarbe füllen
- Schrompf
- Moderator
- Beiträge: 4884
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
[OpenGL] Textur mit Einheitsfarbe füllen
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- xq
- Establishment
- Beiträge: 1582
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [OpenGL] Textur mit Einheitsfarbe füllen
glTexSubImage mit nem einfarbig gefüllten Textur-Array wäre jetzt mein Gedanke. Aber das ist definitiv nicht schnell...
Oder auch: https://www.opengl.org/registry/specs/A ... exture.txt
Oder auch: https://www.opengl.org/registry/specs/A ... exture.txt
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
Re: [OpenGL] Textur mit Einheitsfarbe füllen
Hm, mir fallen spontan folgende (mehr oder weniger effiziente) Möglichkeiten ein (d.h. kein synchroner Host -> GPU Upload), vielleicht gibt es noch mehr Varianten:
- Füllen einer Textur aus einem vorher definierten (statischen) Puffer.
Code: Alles auswählen
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, clearBuffer); glBindTexture(textureTarget, texture); glTexSubImage*(textureTarget, ..., nullptr); glBindTexture(textureTarget, 0); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
- GL_ARB_clear_texture Extension
Code: Alles auswählen
glClearTexSubImage(texture, ...);
- Framebuffer Methode
Code: Alles auswählen
glBindFramebuffer(GL_FRAMEBUFFER, fbo); glDrawBuffers(...); glClearColor(...); glClear(GL_COLOR_BUFFER_BIT); glBindFramebuffer(GL_FRAMEBUFFER, 0);
Zuletzt geändert von mnemonix am 12.12.2014, 14:28, insgesamt 2-mal geändert.
- Schrompf
- Moderator
- Beiträge: 4884
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: [OpenGL] Textur mit Einheitsfarbe füllen
Danke für die schnellen Antworten! TexImage und TexSubImage würde ich vermeiden wollen, weil ich dahinter CPU-Upload und damit einen Sync vermute. Die Extension klingt aber richtig gut, und auch die Idee eines Arbeits-FBOs ist gut, den ich mir dann nach Bedarf umkonfiguriere.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [OpenGL] Textur mit Einheitsfarbe füllen
In meinem erst genannten Fall läuft der Transfer völlig asynchron per DMA ab, d.h. die CPU wartet nicht bis der Upload stattgefunden hat. Wenn du diesen Transfer innerhalb des Frames früh genug startest und währenddessen andere Arbeit verrichtest (die diese Daten noch nicht benötigt) wirst du diesen kaum merken. Anders sieht es aus, wenn du glTex*Image direkt ohne Pixel Buffer Object verwendest, da verschwendest du wertvolle CPU-Zeit. Aber die glClear*-Methoden sind natürlich immer vorzuziehen, wobei die Auswahl der besten Methode immer per Benchmark stattfinden sollte. Jeder Vendor implementiert OpenGL anders.Schrompf hat geschrieben:TexImage und TexSubImage würde ich vermeiden wollen, weil ich dahinter CPU-Upload und damit einen Sync vermute.
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: [OpenGL] Textur mit Einheitsfarbe füllen
Man kann ja einfach überprüfen ob die Extension unterstützt wird und wenn nicht immer noch auf eine andere Variante zurückgreifen.
Die Extension ist scheinbar auch in OpenGL 4.4 Core.
http://delphigl.de/glcapsviewer/listrep ... ar_texture
Die Extension ist scheinbar auch in OpenGL 4.4 Core.
http://delphigl.de/glcapsviewer/listrep ... ar_texture
- Schrompf
- Moderator
- Beiträge: 4884
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: [OpenGL] Textur mit Einheitsfarbe füllen
Ja, das ist mein Plan. GL_ARB_CLEAR_TEXTURE, falls verfügbar, sonst vorbereiteten Framebuffer umkonfigurieren und darüber clearen. Allerdings ist der Grund, warum ich ein Rendertarget vorab clearen will, eh ein selbstgebautes Problem in meinem PostFX-Framework. Von daher könnte ich da auch einfach einen Zusatz-Parameter reinhacken und komplett ohne auskommen. Ich überlege noch, wie ich das löse.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.