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

Aktuelle Zeit: Fr Jul 18, 2025 11:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Maximale Dimension OpenGL
BeitragVerfasst: Do Mär 12, 2009 09:19 
Offline
DGL Member

Registriert: Do Mär 12, 2009 00:50
Beiträge: 1
Gibt es bei OpenGL (unter Windows XP / Vista) eine Beschränkung hinsichtlich der Größe eines Bildes?
Wir haben den Auftrag zu einem Projekt, bei dem an einen PC mit vier Quad-Head-Graphikkarten insgesamt 16 Monitore angeschlossen (je 1920 x 1200) und zu einem Desktop zusammengefasst werden sollen, auf dem EIN animiertes Bild darzustellen ist (das dann die Dimension 30.720 x 1200 Pixel hat). Es handelt sich um einfache 2D-Animationen mit geringer Farbtiefe, kein 3D.
Hat jemand Erfahrung hinsichtlich der Programmierung mit OpenGL in einer solchen Umgebung?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 12, 2009 09:50 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Ich habe damit zwar keine Erfahrung, aber es als ein Bild auf einer Karte zu rechnen wird wohl schiefgehen, weil ein solches Bild samt Tiefenpuffer und Co eine einzelne Karte wohl schon an der riesigen Datenmenge von über 200MB für Doppelpuffer, Bilddaten, und Tiefenpuffer etwas überfordert sein wird. Da aber eh mehrere Karten zur Verfügung stehen, kann es eigentlich nicht so schwierig sein, weil man kann ja die Karten gleichzeitig rendern lassen. Und das Bild entsprechend aufzuteilen ist ein kleiner Dreisatz bei der Einstellung der Perspektive. Und wenn sich die Monitore gut anordnen lassen, kann evtl. jede Karte auch auf ihren 4 Schirmen recht autonom arbeiten. Andererseits stellt sich die Frage ob eine derart gigantisches Bild überhaupt benötigt wird, weil bei 16 Monitoren hat man schon gewaltig Fläche, wenn man das im Großen ansehen will, steht man schon ein ganzes Stück vom Bild weg und die feinen Details gehen sowieso unter: hochskalieren ist evtl. eine Option... Beamer bringen eher wenig detail an die Wand, es genügt aber meist auch für recht große Flächen - nur so zum einschätzen was wirklich gebraucht wird.
[edit] evtl. sind die 200MB auch gar nicht soviel, weil moderne karten ja teilweise auch mit 4 fach antialias auf einem monitor zeichnen, aber die dimension des bildes ist dennoch sehr gestreckt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 12, 2009 12:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also wirklich Erfahrung damit habe ich auch nicht.

Was definitiv nicht gehen wird ist eine Beschleunigung über den Rand der Grafikkarten hinweg. Also da wirst du mit 4 Karten definitiv mindestens 4 Kontexte benötigen. Wie groß die einzelnen Kontexte dann werden können musst du mit dem Parameter GL_MAX_VIEWPORT_DIMS erfragen. Das ist von Gerät zu Gerät unterschiedlich. Mit der AMD/ATI Radeon HD 2400 hier kann mein OpenGL Fenster maximal 8192x8192 groß werden.

Interessanter dürfte Windows werden. Wenn man ein Fenster maximiert geht Windows ganz gerne her und maximiert es nur auf dem einem Monitor. Grafikkartenübergreifend ist eine Beschleunigung sowieso ausgeschlossen. Also da brauchst du in jedem Fall mindestens 4 Kontexte. Wenn sich die Fenster weigern über mehrere Bildschirme zu gehen dann sogar auch für jeden Monitor einen eigenen Kontext. Das weiß ich so nicht wie sich Windows verhält. Musst du ausprobieren.

Bei mehreren Kontexten besteht auch das Problem, dass du kaum wirklich gleichzeitig umschalten kannst. Entsprechend könnte es auch gut sein, dass man eine Animation von Links nach Rechts bekommt oder so etwas in der Art. Dafür gäbe es aber bei Nvidia irgendwas mit SwapGroups oder so. Bei Bedarf kann ich aber noch mal nachschauen.

Von welcher Art sind denn die Animationen? Wenn die Animationen nur sehr sehr kleiner Natur sind, dann wäre es eventuell besser dafür zu sorgen, dass auf jedem Monitor ein Fenster maximiert dargestellt wird (oder über 4) und du dann mit der GDI (Canvas) auf die Fenster malst. Es ist so oder so 2D. Mit der GDI Plus sogar auch noch etwas beschleunigter als die GDI. In jedem Fall langsamer als OpenGL. Aber OpenGL ist immer 3D selbst, wenn du nur 2D darstellst. Und Grafikkartenübergreifend funktioniert die Beschleunigung nicht. Wenn die Animation also wirklich nur klein ist dürftest du dir mit OpenGL sogar mehr Probleme als Vorteile in Boot holen. Das ist aber nur meine Meinung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 12, 2009 17:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Also, man kann fenster definitiv über zwei (oder auch mehr...) Monitore strecken (aber nicht unbedingt über maximieren, sondern über vergrößern). Ich mache das hier gerne mit Blender, allerdings habe ich auch nur eine Grafikkarte, die den Job erledigen muss. Ich kann dir also nicht sagen, wie das mit unterschiedlichen Grafikkarten aussieht.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 12, 2009 18:28 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Nur mal so nebenbei: Wie bekommt man denn überhaupt den Kontext für ne weitere/andere Karte?
Oder: Wie bringe ich Windows bei, auf jeder Grafikkarte immer genau den gleichen Kontext zu erzeugen?


Aber mal was anderes: Ich habe es schon einige Male beobachtet, dass einige Programme, die etwas grafisches ausgeben (Mediaplayer und so Zeug), das nur machen solange das Fenster nicht übergreifend zwischen den Desktopteilen liegt.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 12, 2009 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das kann man leider nicht kontrollieren. Je nachdem auf welchem Monitor das Fenster liegt wird die entsprechende Grafikkarte benutzt. Also kann man nur hergehen und schauen welche Monitore man hat und dann anhand von den Infos die Kontexte erstellen. Hardwarebeschleunigungen über Monitorgrenzen hinweg gehen nur, wenn es die gleiche Grafikkarte ist. Wie soll das System sonst mit Texturen etc klar kommen. In dem Fall kann man entweder umständlich die Hardware IDs auslesen oder man macht es so, dass der Benutzer es einstellen muss und dann ist er selber Schuld, wenns nicht stimmt. Aber OpenGL an sich bietet keine Möglichkeit dafür.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 13, 2009 02:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Sowas wird, so wie ich bisher nur gesehen hab, über mehrere PCs und entsprechend mehreren Programmen und einer Netzwerkschnittstelle gelöst.
Stichwort wäre Rendercluster.
Dabei wird jedem Programm-Prozess ein Ausschnitt des gesammten zugewiesen und kümmert sich nur um dieses.
Die Verwaltung der Daten liegt dann in der Regel als SceneGraph vor und wird über Netzwerk abgeglichen(nur ein Datenupdate, keine Datenberechnung).
Der Server enthält dann die Logik und den Daten-Layer, wärend die einzelnen Clients zusammen den Präsentations-Layer bilden.
So kann dann z.B. 8xPCs und ein Server, dann die 16Bildschirme Ansteuern, wenn man davon ausgeht, dass jeder PC eine Dual-View support hat(z.B. GF8800 schafft das bei der geforderten Auflösung sorglos).
Wenn 4 Grafikkarte abei euch die Arbeit in einem System übernehmen, dann sollte die CPU entsprechend Hochwertig sein(z.B. ein 8Kern und aufwärts CPU).
Die realisierung wäre aber die gleiche, nur das die Kommunikation über Localhost laufen würde(aufgrund der 3GB Speicherbegrenzung würde die Implementierung in einem Prozess sich als schwierig erweisen, da jedes Fenster bis Windows Vista(aufgrund von dx10 in Graka möglich) im Arbeitsspeicher liegt).
Wenn ihr 2D macht, dann ist die Grafikschnittstelle ja die vom Fenster(gdi+/x11) und diese wird, sobald es im einem Monitorbereich liegt auch in diesem behandelt(Hardwaremässig).
Problematischer stelle ich mir nur die Zeichenleistung bei der Auflösung vor, da ich wette das die CPU da gnadenlos einbrechen wird.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 13, 2009 13:46 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Lossy, mit einem der letzten Treiber von nVidia müsssten nVidia-Karten im SLi zumindest auch auf mehreren Bildschirmen beschleunigen können...

Hope this helps ;)
~ Philipp

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 13, 2009 14:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ist SLI nicht da um die primäre Karte bei deren Rechnungen zu unterstützen? Also eine zweite GPU an der kein eigener Monitor angeschlossen ist? Oder wie habe ich mir das vorzustellen? Weil an meiner Radeon kann ich auch 2 Schirme anklemmen und da kann ich eine OpenGL Anwendung von einen auf den Anderen ziehen ohne das die Beschleunigung aussetzt. Interessant wird es erst, wenn eine zusätzliche Karte ins Spiel kommt. Das müsste ja dann ein SLI Modus sein der mit dem "klassischen" SLI Modis nicht mehr viel gemein hat? Also ich frag nur, weil ich kein SLI/CrossFire habe und ich nicht weiß ob ich mir das richtig vorstelle.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]