Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jan 17, 2021 05:12

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL 3.2 + Postprocessing Effekte
BeitragVerfasst: So Dez 20, 2009 20:28 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Hi,
Ich versuche momentan alles möglichst OpenGL 3.2 kompatibel zu halten, damit ich sobald vernünftige Bindings für meine bevorzugte Sprache vorhanden sind umsteigen kann, jedoch frage ich mich gerade wie ich vernünftig PostProcessing Effekte benutzen kann, im Moment zeichne ich dazu ein Fullscreen Quad mit der jeweiligen Textur und binde meine Shader, aber da es in OpenGL 3.2 ja scheinbar nichtmehr so simpel ist ein Fullscreen Quad zu zeichnen (Gut, ein VBO und 2 Triangles sind nun nicht sonderlich kompliziert, aber reichlich unperformant) frage ich mich wie ich das möglichst Performant auf die Reihe krieg, hat da jemand Ideen?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Dez 20, 2009 21:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 04, 2008 23:15
Beiträge: 39
Wohnort: Oberösterreich
Programmiersprache: ObjPas, C, DivASM
Hallo

Ich arbeite seit über einem halben Jahr mit reinem OpenGL3.x, aber für so einen Fall ist mir auch noch keine bessere Möglichkeit untergekommen.

Wenn man allerdings bedenkt das dieses Quad (2x Triangle), pro PostProcessing Effekt nur einmal gezeichnet werden muss, denke ich das sich der negative Einfluss auf die Performance nicht sonderlich groß sein wird.

humflo


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Dez 20, 2009 21:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Was spricht gegen ein VertexArray? Das sollte es in OpenGL 3 noch geben.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Dez 20, 2009 21:18 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Coolcat hat geschrieben:
Was spricht gegen ein VertexArray? Das sollte es in OpenGL 3 noch geben.


AFAIK gibt es VertexArrays nurnoch in Form von "VertexArrayBuffers", diese bündeln mehrere VertexBuffer Bindings und States (Attribut Pointer und solche dinge) in einem einzigen Buffer, damit man nurnoch einen Buffer binden muss um OpenGL Funktionsaufrufe zu sparen, aber Vertex Arrays in form des "Immediate" Rendering gibt es nichtmehr. Wenn ich falsch liege bitte ich darum mich zu korrigieren.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Dez 20, 2009 21:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Kapitel 2.8
http://www.opengl.org/registry/doc/glsp ... 091207.pdf
über den "pointer" kannst du wie bisher ein Array angeben.

....wobei...probiert habe ich das bisher nicht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 02, 2010 21:47 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

auch wenn das Thema etwas älter ist: Ich stehe jetzt vor demselben Problem und habe versucht, die von Coolcat verlinkte Methode mittels Vertex Arrays zu realisieren. Ich habe nur das Problem, dass ich beim Aufruf von glVertexAttribPointer immer eine InvalidOperation bekomme. Mein Codeausschnitt sieht so aus:
Code:
  1.   glEnableVertexAttribArray(0);
  2.   glVertexAttribPointer(0, 3, GL_FLOAT, ByteBool(false), 0, @points);
  3. //  glDrawArrays(GL_QUADS, 0, 4);
ich habe glDrawArrays auskommentiert, da der Fehler schon vorher passiert. Versuchsweise habe ich glGet (GL_max_vertex_attribs) versucht, das Ergebnis ist 16. Ich habe nur alte Demos mit OpenGL 2.1 gefunden, in denen noch der Befehl glEnableClientState verwendet wird, dies führt aber bei OGL 3.2 auch zu einer InvalidOperation. Hat jemand noch eine Idee, was da falsch ist? Für Hilfe wäre ich sehr dankbar.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 02, 2010 21:56 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
In meiner kompletten Andorra 2D Bibliothek verwende ich im DirectX9c ausschließlich VBOs, da dies die bevorzugte Methode ist. Probleme sind mir damit noch keine unter gekommen - im Gegenteil. Mit den VBOs bin ich durchweg schneller als bei den von mir bei OpenGL verwendeten Vertex Arrays und das, obwohl bei einer 2D-Engine nicht viel mehr als lediglich Quads gezeichnet werden.

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 03, 2010 00:42 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7772
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist dein ByteBool wirklich das gleiche wie GL_FALSE?

Invalid Operation? hmmm.... steht das alles innerhalb eines glBegin/glEnd Blocks?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 04, 2010 16:11 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

habs nochmal mit ByteBool(GL_FALSE) getestet, da liegt das Problem aber nicht (getestet) und ist auch eher unwahrscheinlich, da in Software generell der Wert "FALSE" so gut wie immer 0 ist. Da ich OpenGL 3.2 benutze, kann das ganze auch nicht zwischen glBegin/glEnd sein. Ich habe mich entschieden, vorerst ein Vertex Array Object zu verwenden, obwohl ich nach wie vor an einer Lösung interessiert wäre.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 05, 2010 10:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Invalid Operation liegt nicht an irgendwelchen Werten. Das ist dann immer Invalid Value. Zu mindest dabei sind sie sehr konsequent. Invalid Operation deutet darauf hin, dass du etwas aufrufst was du dort nicht aufrufen darfst. Bei den Definionen der Erweiterungen gibt es immer einen Abschnitt Errors der eine Auflistung enthält wann welche Fehlercodes gesetzt werden.

GL_ARB_vertex_shader hat geschrieben:
The error INVALID_OPERATION is generated by any command accessing
texture coordinate processing state if the texture unit number
corresponding to the current value of ACTIVE_TEXTURE is greater than or
equal to the implementation-dependent constant MAX_TEXTURE_COORDS_ARB.

The error INVALID_OPERATION is generated by any command accessing
texture image processing state if the texture unit number corresponding
to the current value of ACTIVE_TEXTURE is greater than or equal to the
implementation-dependent constant MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB.

The error INVALID_OPERATION is generated by GetActiveAttribARB if
<programObj> is not of type PROGRAM_OBJECT_ARB.

The error INVALID_OPERATION is generated by GetAttribLocationARB if
<programObj> is not of type PROGRAM_OBJECT_ARB or if <programObj> has
not been linked successfully.

The error INVALID_OPERATION is generated by BindAttribLocationARB if
<name> starts with the reserved "gl_" prefix.

The error INVALID_OPERATION is generated by BindAttribLocationARB if
<programObj> is not of type PROGRAM_OBJECT_ARB.

The error INVALID_OPERATION is generated by GetObjectParameter{if}vARB
if <pname> is OBJECT_ACTIVE_ATTRIBUTES_ARB or
OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB and <obj> is not of type
PROGRAM_OBJECT_ARB.

The error INVALID_OPERATION is generated by GetObjectParameter{if}vARB
if <pname> is OBJECT_SUBTYPE_ARB and <obj> is not of type
SHADER_OBJECT_ARB.

The error INVALID_OPERATION is generated by GetVertexAttrib*ARB if
<index> is zero and <pname> is CURRENT_VERTEX_ATTRIB_ARB.


Laut Spec kann VertexAttribPointer nur Invalid Values generieren. Deswegen frage ich einfach mal so. Bist du wirklich sicher, dass der Fehler genau da liegt. Ansonsten irritiert mich, dass du einen Pointer direkt übergibst. Laut meinen Wissen soll doch mit gl3 alles in einem VBO liegen. Entsprechend müsstest du dort ein Offset innerhalb des VBOs angeben.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 05, 2010 10:49 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Zitat:
The commands
void VertexAttribPointer() [...] describe the locations and organizations of these arrays.
Zitat:
An INVALID_OPERATION error is generated if any of the *Pointer commands
specifying the location and organization of vertex array data are called while zero
is bound to the ARRAY_BUFFER buffer object binding point (see section 2.9.6), and
the pointer argument is not NULL.

Es sieht so aus, als ob die Methode nicht der richtige Ansatz ist. Ich denke, ich verwende meine VBOs weiter.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.109s | 17 Queries | GZIP : On ]