Wie kann man in ein 24bit Bitmap rendern? PFD_DRAW_TO_BITMAP im Renderformat wäre möglich, jedoch muss dafür ein 2. RC geschaffen werden => Dies hat einige zeitliche Nachteile insbesondere bei der jeweiligen Textur/Displaylist Erstellung => nicht optimal
Dies sollte doch auch per FBO gehen (da brauch ich ja keinen neuen RC). Jedoch würde ich gerne ein Bitmap erhalten und nicht eine Textutre (und auf die Textur auch am besten komplett verzichten) - also weing Umwege. Wie bekomme ich denn die Bits des Bitmaps heraus und kann wie kann man dann das BMP speichen (oder als TBitmap haben)?
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
am einfachsten ist wohl glreadpixels, es ist allerdings immer etwas langsam etwas aus dem VRAM in den normalen RAM zu holen bzw umgekehrt (was du tun musst wenn du Dateien schreiben willst).
Ja, aber in jedem Fall muss ich bei den Beschreibungen eine Texture nutzen (die ich ja gar nicht benötige). Dies bringt wieder eigene Problem mit (Max. Größe, Power of 2, Speicher....).
Get es nicht auch ohne Textur - ich muss doch nur an den Color buffer!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ein FBO benötigt doch so oder so mindestens eine Zieltextur, also um Texturen wirst du nicht herumkommen. POT ist auf modernen Grafikkarten eh kein Problem mehr, die max. Größe sollte auch zuzmindest gleich den Viewportdimensionen sein, sprich kein Nachteil.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Du darfst nicht davon ausgehen das du direkten Zugriff mit der HW, die dein OS für IO benutzt, auf den Buffer, in den OpenGL schreibt, hast. Da die Hardware, für die deine OpenGL Implementierung ausgelegt ist, diese Art von Zugriff, in der Regel, nicht unterstützt. Soll heißen: -Entweder du verzichtest auf die Vorteile der jeweiligen Hardware oder du musst kopieren (da musst du schauen was schneller ist) -Sofern keine entprechenden Extensions geladen werden können, musst du mit den Standart Objekten von OpenGL leben.
At this point we still don’t have a way of writing colour information to the FBO, so that is what we are going to add now. There are two ways of going about it: •Attach a colour Renderbuffer to the FBO •Attach a texture to the FBO
Was ich tun will ist genau der 1. Weg - Keine Texture sondern einfach ein buffer. Jedoch habe ich nirgends ein beispiel dafür gefunden. Und wenn ich dann den Buffer habe weiß ich noch nicht, wei ich drauf zugreife und effektiv die Pixel lese. Gibts dazu beispiele oder hat es schon mal wer so gemacht?
Texture möchte ich nach, wei vor umgehen, da ich mit allen gängigen hardwaren rechen muss also auch integrierter grafik von einem netbook oder älteren notebook zum beispiel Intel GMA XX.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
user69 hat geschrieben:
Ich habe mehrfach im Internet folgendes gefunden:
At this point we still don’t have a way of writing colour information to the FBO, so that is what we are going to add now. There are two ways of going about it: •Attach a colour Renderbuffer to the FBO •Attach a texture to the FBO
Was ich tun will ist genau der 1. Weg - Keine Texture sondern einfach ein buffer. Jedoch habe ich nirgends ein beispiel dafür gefunden. Und wenn ich dann den Buffer habe weiß ich noch nicht, wei ich drauf zugreife und effektiv die Pixel lese. Gibts dazu beispiele oder hat es schon mal wer so gemacht?
Texture möchte ich nach, wei vor umgehen, da ich mit allen gängigen hardwaren rechen muss also auch integrierter grafik von einem netbook oder älteren notebook zum beispiel Intel GMA XX.
vielleicht hättens sich mal den Post von Jens01 auch tatsächlich mal durchlesen sollen. so mit 5 sekunden google usw.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
user69 hat geschrieben:
Was ich tun will ist genau der 1. Weg - Keine Texture sondern einfach ein buffer. Jedoch habe ich nirgends ein beispiel dafür gefunden. Und wenn ich dann den Buffer habe weiß ich noch nicht, wei ich drauf zugreife und effektiv die Pixel lese. Gibts dazu beispiele oder hat es schon mal wer so gemacht?
Texture möchte ich nach, wei vor umgehen, da ich mit allen gängigen hardwaren rechen muss also auch integrierter grafik von einem netbook oder älteren notebook zum beispiel Intel GMA XX.
Sieh dir mal glGenRenderbuffersEXT an, damit erstellt man einen solchen Renderbuffer.
Letztendlich ist dass dann ein Offscreenbuffer, der etwas weniger Speicher als eine Textur verbraucht und mittels glReadPixels normal ausgelesen werden kann wenn er addressiert wird.
Aber es spielt letztendlich kaum eine Rolle ob du für die Farbinformationen ne Textur oder nen Renderbuffer nutzt (bis auf den Speicherunterschied), beides läuft nur auf Hardware die auch FBOs unterstützt.
Wenn du also wirklich auch sehr alte Hardware unterstützen willst solltest du entsprechend auf FBOs verzichten und es direkt über den Framebuffer machen. Ist zwar langsam, aber wenn FBOs nicht unterstützt werden gehts nicht anders.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.