- //check if OpenGL 2.0 is supported
- if (glewIsSupported("GL_VERSION_2_0"))
- {
- cout<<"OpenGL 2.0 is supported...\nGLSL is integrated in core...\n";
- }
- else
- {
- cout<<"OpenGL 2.0 not supported\n";
- }
DGL https://delphigl.com/forum/ |
|
Wie Daten aus Shader auslesen? https://delphigl.com/forum/viewtopic.php?f=20&t=7014 |
Seite 1 von 2 |
Autor: | elektrokrach [ Mo Okt 29, 2007 15:39 ] |
Betreff des Beitrags: | Wie Daten aus Shader auslesen? |
erledigt |
Autor: | Sascha Willems [ Mo Okt 29, 2007 15:41 ] |
Betreff des Beitrags: | |
Das geht so direkt nicht, man kann nich von Aussen auf Werte innerhalb eines Shaders zurückgreifen. Wenn du Rückgabewerte eines Shaders ermitteln willst musst du diese mittels Shader in eine Textur schreiben lassen und diese dann so auslesen. |
Autor: | elektrokrach [ Di Okt 30, 2007 17:07 ] |
Betreff des Beitrags: | |
erledigt |
Autor: | elektrokrach [ So Nov 04, 2007 16:55 ] |
Betreff des Beitrags: | |
lass ma |
Autor: | Lord Horazont [ So Nov 04, 2007 19:04 ] |
Betreff des Beitrags: | |
Ich würde dir zum Auslesen auf jeden fall den Ortho-Modus empfehlen. Dann machst du 1x1 Pixel große Quads. Für jedes Quad solltest du dann die Werte angeben, die dein Shader berechnen soll. Die für die Berechnung gebrauchten Werte könnte man z.B. per Texturkoordinate, die du ja theoretisch nicht brauchst, übergeben. (glMultiTexCoord). Die Lichtquellen könnte man entweder in Uniform-Matrizen packen oder in eine Textur. Nach möglichkeit solltest du aber die erste Methode verwenden, da du bei der zweiten sehr viele Texturzugriffe machen müsstest und in den Datentypen auch relativ eingeschränkt bist (0.0 .. 1.0). Im Shader kannst du dann das ergebnis mit gl_FragColor ausgeben, der Pixel, der das Quad darstellt, enthält dann das ergebnis, welches du z.B. mit glReadPixels auslesen kannst. Gruß Lord Horazont |
Autor: | elektrokrach [ Mo Nov 05, 2007 15:34 ] |
Betreff des Beitrags: | |
Danke |
Autor: | oc2k1 [ Mo Nov 05, 2007 16:05 ] |
Betreff des Beitrags: | |
2x2 , 3x3 oder 4x4 |
Autor: | Daniellus [ Di Nov 06, 2007 18:29 ] |
Betreff des Beitrags: | |
Hallo elektrokrach, ich bin selber intensiv mit GPGPU beschäftigt, und erledige jeglichen Datentransfer vom Applikationsspeicher zum Grafikkartenspeicher und zurück über Texturen (habe sehr viel Daten). Ich kann dir vielleicht helfen. Was genau hast du denn vor? Wichtig ist deine Datenmenge zum Shader für die Berechnung und vor allem die Menge, welche du zur Applikation zurücklesen möchtest. MfG[/code] |
Autor: | elektrokrach [ Di Nov 06, 2007 21:01 ] |
Betreff des Beitrags: | |
erledigt |
Autor: | elektrokrach [ Fr Nov 09, 2007 20:15 ] |
Betreff des Beitrags: | |
erledigt |
Autor: | Daniellus [ Mo Nov 12, 2007 18:41 ] |
Betreff des Beitrags: | |
Hallo, hört sich machbar an... Fragen: Zitat: Also, ich habe einen Haufen Vertices (3 * GLfloat pro Vertex)]
Sind das deine Raumkoordinaten? Die Berechnete Farbe soll dann für andere Vertizes immer wieder benutzt werden, habe ich das richtig verstanden? Soll die Farbe dann auf der Grafikkarte verbleiben, oder willst du sie von der Applikation auf das Vertex anwenden? Welche Grafikkarte hast du? OpenGL Version? Hast du Erfahrung mit: 1. FBO's + RTT(Render-To-Texture)? 2. Wahlfreien Zugriff in einem Shader auf Texel einer Textur? MfG |
Autor: | elektrokrach [ Mo Nov 12, 2007 20:41 ] |
Betreff des Beitrags: | |
is eh wurscht |
Autor: | Daniellus [ Di Nov 13, 2007 08:15 ] |
Betreff des Beitrags: | |
ATI oder NVIDIA ist bei deinem Vorhaben vermutlich egal. Es gibt auch die Möglichkeit, das du die endgültigen Farben im Grafikspeicher läßt und im Shader die Farbe zuordnest. Jeder Datentransfer zur Grafikkarte kostet Zeit. Zuerst sollten wir deine OpenGL Version nach 2.0 Abfragen. Ich benutze dafür GLEW. Ich programmiere allerdings mit C/C++, den Code müsstest du nach Delphi ändern. Code:
|
Autor: | elektrokrach [ Di Nov 13, 2007 15:05 ] |
Betreff des Beitrags: | |
egal |
Autor: | Daniellus [ Mi Nov 14, 2007 08:49 ] |
Betreff des Beitrags: | |
1. Ohne Fenster nix zu zeichnen Code:
2. Orthogonale Projektion,Viewport und Render-Textur einstellen Dein Viewport muss die gleichen Ausmaße wie deine Render-Textur haben. Du musst dazu wissen wie viel Farben entstehen. Bsp: Code:
Code:
3.Offscreen-Memory mit FBO verwalten(nähere Infos siehe Tutorial) Code:
Du kannst mit einem fbo mehrere Speicherbereiche auf der Grafikkarte reservieren. GL_COLOR_ATTACHMENT0_EXT ist ein Speicherbereich, GL_COLOR_ATTACHMENT1_EXT währe dann der nächste, natürlich mit einer anderen Textur. 4. Zeichne ein Quad über den gesamten Viewport, wähle vorher deinen Speicherbereich zum Rendern ( wenn du mehr als einen reserviert hast ) Code:
Weise den Fragmenten über einen Shader versuchsweise verschiedene Farben zu, diese müssten dann im folgenden Schritt aus dem Memory gelesen werden. 5. Lesen des Speicherbereiches Code:
Das ist so ziemlich das Grundprinzip. Fehler inklusive...Bring das mal zum Laufen und melde dich dann...auch wenn es nicht läuft. Kleiner Ausblick was noch kommt: Deine Positionen und Farben für die Lichter packst du jeweils in eine Textur. Die Texturen machst du im Shader zugänglich. Die Koordinaten der Positionen und Farben der Lichter, sollten mit den Koordinaten der dazugehörigen Farben in der Render-Textur übereinstimmen. Zum Beispiel enthält Koordinate (0;0) in der Positionstextur und der Lichtfarbentextur, genau die Werte um die entsprechende Farbe in der Render-Textur mit der gleichen Koordinate (0;0) zu berechnen. Dies ist einfach zu handhaben, aber nicht immer möglich... |
Seite 1 von 2 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |