Das Problem ist dass "glBegin" und der Immediate Mode keine moderne Grafikkarte mehr repräsentiert. Grafikkarten arbeiten Buffer basiert und parallel. Immediate Mode sollte vom Treiber in Buffer umgewandelt werden und die GPU arbeitet das dann ab. Es gibt keine Funktionen mehr in der Hardware die diese OpenGL Befehle repräsentieren. Die Immediate Mode Befehle werden im Prinzip zwecks Kompatibilität so zu sagen emuliert. Deshalb wurden sich auch aus dem OpenGL Standard genommen.
Wenn du wirklich gigantische Mengen zeichnen musst und alle Arten von Optimierungen fehlschlagen, besteht die theoretische Möglichkeit, dass du ein VBO anlegst und den Inhalt immer wieder änderst und immer wieder zeichnest. Rechne aber nicht mit viel Performance.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
user69 hat geschrieben:
Ein paar Antworten würden mir aber noch helfen: 1. Wenn ich die Daten in chunks unterteile, was wäre dann eine gute Größe um das VBO optimal zu bedienen und auch nicht so leicht in Speicherprobleme mit großen Blöcken beim OpenGl upload zu geraten? Ich dacht so an 65.000 also unter 16 bit integer um auch im ElementArray nur 2 bytes zu nutzen. 2. Wäre es speedtechnisch vertretbar (also zumindest so schnell, wie GlBegin), wenn ich jedes Frame die Daten hochlade, zeichne und wieder freigebe? 3. Ist derzeit schon abzusehen, dass in absehbarer Zukunft die depricated Funktionen aus den OpenGL Treibern entfert werden? 4. Wäre es aus OpenGL speicher Sicht nicht evtl. doch sinvoll ab z.B. 2 mio Triangles auf das alte OpenGL zurückzufallen? Da habe ich solche Speicherprobleme ja nicht. (Ich weiß, das zumindest einmal mir davon abegeraten wurde, aber ich sehe im alten OpenGL duchaus Speichervorteile.) 5. Kann man mit modern OpenGl irgendwie zumindest den speed des alten glBegin erreichen, ohne für x mio triangles massiv speicher zu gebrauchen? Der Treiber tuts ja auch wenn ich im depricated glBegin zeichne (ok, ich nehme an der Vergleich hinkt etwas, da der Treiber mehr Möglichkeiten hat. Aber vielleicht gibts doch Ideen).
user69
1.) das haengt vom jeweiligen Zielsystem ab. Am besten du machst da eine globale Konstante die du spaeter waerend der Testphase leicht anpassen kannst. 2.) Bei dieser Menge wohl eher nicht... 3.) Nun ich bin mir bei den anderen Herstellern nicht sicher, aber Nvidia ist da ziemlich eindeutig: Es fliegen keine Funktionen raus. Quelle 4.) Retained Mode APIs (z.B. modernes OpenGL) brauchen in der Regel mehr Speicher, da noch zusaetzlicher Overhead fuer das Model draufgeht. Bei Immediate Mode (z.B. Direct2D) verwaltet die Applikation selbst das Model und kann hier dementsprechend optimieren. Allerdings ist es sehr viel schwieriger Engpesse bei der Uebertragung zu vermeiden. Im Worstcase waeren das zum Beispiel alle Dreiecke pro Frame. 5.) Nun du koenntest Vertex Arrays benutzen. Da gibt es einmal eine alte und einmal eine moderne Objekt Variante (VAOs). Die moderne Variante koenntest du dann als eine Art Cache benutzen um haeufig verwendete Objekte auf der Grafikkarte abzulegen. Die beiden sind sich ausserdem so aehnlich das es kein Problem sein duerfte hier alles in einer Klasse zu erledigen.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
end hat geschrieben:
Nun ja, ich würde mal sagen, dass Speicher heutzutage das billigere Bottleneck ist, Rechenzeit ist teurer
Nun in dem Fall ist ja nicht die Rechenzeit der Bottleneck sondern die Übertragungsrate. Und genau da will ja MS was tun ... also naja ist beides cool würd ich sagen
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Man könnte es vielleicht mit Buffer Object Streaming probieren. Man reserviert einen festen Speicher und sendet pro Frame mehrere Blöcke von Daten hoch (die dann sofort abgearbeitet werden müssen).
_________________ Wenn Gauß heute lebte, wäre er ein Hacker. Peter Sarnak, Professor an der Princeton University
Mitglieder in diesem Forum: 0 Mitglieder und 41 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.