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

Aktuelle Zeit: Mi Apr 24, 2024 14:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: VBO´s und Grafikkarten
BeitragVerfasst: Fr Mai 24, 2013 10:48 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Hi Leute,

zur Zeit verwende ich für dynamische Objekte die VBO´s zur Darstellung. Auf meinem Arbeitssystem (Intel HD 4000) funktioniert das einwandfrei,
jedoch auf einem anderen (Radeon 3650) produziert die Verwendung der VBO´s gewaltige Fehldarstellungen!

Frage 1: Gibt es eine Lösung die die Verwendung von VBO´s ermöglicht?
Frage 2: Gibt es eine Liste der Grafikkarten die VBO´s unterstützen oder gar eine Möglichkeit eine Funktion zu implementieren
die mir angibt ob die Grafikkarte des aktuell verwendeten Systems diese unterstützt?
Frage 3: Oder mache ich vllt. gar einen Fehler?! (bin ja noch neu in der opengl - Welt)

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Fr Mai 24, 2013 10:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Frage 3 ist schwer zu beantworten.

Für Frage 2 gibts Datenbanken. Diese Liste ist auf jeden fall ein guter start.

Für Frage 1: Probier mal aktuelle Treiber.

grüße

_________________
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: Re: VBO´s und Grafikkarten
BeitragVerfasst: Mo Mai 27, 2013 08:17 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Vielen Dank. Ja, gut für Frage 3 hätte ich meinen Source - Code anhängen sollen ;D, aber
da es ja auf meinem System funktioniert und ich mir die Nutzung von VBO´s über ein Video-
tutorial beigebracht habe, gehe ich mal von diesem Punkt nicht aus.

Aber um nochmal auf Frage 2 zurück zu kommen: Hat jemand schonmal die Grafikkartenin-
formationen ausgelesen und damit gearbeitet? Das wäre eine Lösung mit der ich mich an-
freunden könnte um schon beim Start meines Programmes die Darstellung zu wählen (mit VBO´s
oder ohne).

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Mo Mai 27, 2013 12:56 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Litefora hat geschrieben:
aber
da es ja auf meinem System funktioniert und ich mir die Nutzung von VBO´s über ein Video-
tutorial beigebracht habe, gehe ich mal von diesem Punkt nicht aus.


Hier würde ich stark zweifeln, denn aus eigener Erfahrung weiß ich das sich zum Beispiel NVIDIA Karten und ATI Karten unterschiedlich verhalten, bei mir war es beim Umstieg auf VBO's zu Anfang auch so, dass es bei mir zuhaus einwandfrei lief aber auf NVIDIA und INTEL Karten krachte es herbe.

Dazu gibts auch einen thread von mir http://www.delphigl.com/forum/viewtopic.php?f=10&t=10803

letztendlich war der "Fehler meinerseits" ein falsch gesetztes Finalize.
das war ATI völlig egal aber NVIDIA wurde zu nviDIVA.


schon vor längerem hatte ich einen ähnlichen Fall bei der Verwendung von Texturen, auch hier gab es Unterschiede, die damals zwar nicht zum Absturz führten aber zu einem ungewünschten Abdunkeln der gesamten Szene auf NVIDIA.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 07:40 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Okay, danke. Ich werd mir mal deinen Thread durchlesen.

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 08:22 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Also sehr viel weiter gebracht hat mich der Thread nicht. Ich poste einfach mal meinen Source-Code.
Also aktuell ist das Zeichnen über VBO´s nicht gerade schneller als im Intermediate Mode!
Zustätzlich generiert die Nutzung von VBO´s auf einem weiteren Rechner Fehldarstellungen, auf meinem
Arbeitssystem (Intel i5 Core, Intel HD 4000 Graka) läuft es allerdings einwandfrei. Nur eben nicht schneller
bzw. flüssiger, wenn ich die Framerate beobachte.

Die folgende Funktion rufe ich beim laden der Windows-Form auf:
Code:
  1.  
  2.         private void GenVBOWoundTube()
  3.         {
  4.             GL.GenBuffers(1, out this.myBufferHandle);
  5.  
  6.             GL.BindBuffer(BufferTarget.ArrayBuffer, this.myBufferHandle);
  7.  
  8.             GL.BufferData<Vector3d>(BufferTarget.ArrayBuffer,
  9.                                           new IntPtr(this.tubeVBO.Count * sizeof(double) * 3),
  10.                                           this.tubeVBO.ToArray(),
  11.                                           BufferUsageHint.DynamicDraw);
  12.         }
  13.  


Die folgende Funktion wird im Paint-Event meiner glControl aufgerufen:
Code:
  1.  
  2.         public void DrawWoundTube()
  3.         {
  4.             if (this.OnOffVBO == true)
  5.             {
  6.                 // Use vertex buffer for drawing the wound tube.
  7.                 GL.Color3(Color.Red);
  8.  
  9.                 GL.EnableClientState(ArrayCap.VertexArray);
  10.  
  11.                 GL.BindBuffer(BufferTarget.ArrayBuffer, this.myBufferHandle);
  12.  
  13.                 GL.VertexPointer(3, VertexPointerType.Double, 0, 0);
  14.  
  15.                 if (this.tubeVBO.Count != 0)
  16.                     GL.DrawArrays(BeginMode.Quads, 0, this.tubeVBO.Count);
  17.                
  18.                 GL.DisableClientState(ArrayCap.VertexArray);
  19.  
  20.                 //GL.DeleteBuffers(1, ref this.myBufferHandle);
  21.             }
  22.             else
  23.             {
  24.                 // Use intermediate mode for drawing the wound tube.
  25.                 GL.MatrixMode(MatrixMode.Modelview);
  26.  
  27.                 GL.Color3(Color.Red);
  28.                 GL.Begin(BeginMode.Quads);
  29.  
  30.                 for (int i = 0; i < this.tubeVBO.Count; i++)
  31.                 {
  32.                     GL.Vertex3(this.tubeVBO[i]);
  33.                 }
  34.  
  35.                 GL.End();
  36.             }
  37.         }
  38.  


Die Vertex-Liste, welche bei Generierung des VBO´s in ein Array verpackt wird über .ToArray(), wird in jedem Programmzyklus
größer, was auch gewollt ist. Sprich es werden neue Verticies hinzugefügt.

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Zuletzt geändert von Litefora am Di Mai 28, 2013 10:49, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 09:05 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Zitat:
Sprich es werden neue Verticies hinzugefügt.


Für mich sieht das so aus als ob bei jedem Frame auch ein neues VBO erzeugt wird.

_________________
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: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 10:34 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Das erzeugen wird ja in meiner ersten aufgeführten Funktion gemacht. Und diese wird beim Start des Programmes, also im Load-Event meiner
Windows-Form aufgerufen. In jedem Programmzyklus die letztere aufgeführte Funktion. So sollte dann eigentlich nicht permanent ein
neues VBO erzeugt werden. Oder verstehe ich da was falsch?

Und wieso ist die Framerate im Intermediate Mode genau die selbe wie bei Nutzung der VBO´s? Sollte doch eigentlich ein gewaltiger Unterschied
sein. Im Intermediate Mode bricht bei mir die Framerate auf 45 herunter, was aber auch bei den VBO`s passiert. Ohne die Darstellung dieses
Vertex - Arrays bzw. der Vertex - Liste ist sie stabil bei 200.

(Zur Info: Ich verwende die OpenTK Wrapperklassen).

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 11:42 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
schuss ins blaue:

Code:
  1. glVertexPointer(size : TGLint; _type : TGLenum; stride : TGLsizei; const _pointer : PGLvoid);
  2.  


laut wiki will glvertexpointer als letzten wert einen pointer, du übergibst eine 0, ich weiß das ich damit auch mal gegen die Wand gelaufen bin. Weil manche Systeme das akzeptieren und andere nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 12:06 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Nein daran liegt es nicht, die Funktion aus der OpenTK-Library sieht folgender maßen aus:

GL.VertexPointer(int size, VertexPointerType type, int stride, int offset);

Kann es sein, dass es vllt. an der Größe des Arrays liegt? Denn im Laufe des Programmes
erreicht es eine Größe von etwa 10000 Verticies.

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 13:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
VBO's sind älter als die Steinkohle und in den Bereichen geht eigentlich nix schief, weil sie schlicht weg von jedem Spiel genutzt werden und es schon in der Entwicklung auf fallen würde, wenn da ein Bug rein kommt.
Der meiste Fehler ist die falsche verwendung und Folgefehler.
Hobbyisten tendieren dazu keine Fehler zu tracken, erst wenn was sichtlich nicht mehr geht.
Oft sind Treiber auch so nett und tollerieren falsche benutzung, NVidia ist da berühmt drin, während andere wieder sehr nahe an den Specs arbeiten.
So kommt es dann vor, dass man mal zwischen verschiedenen Modellen, einer Firma auf einmal Probleme bekommt, weil das neue Modell auch ein neuen Treiberbranch benutzt und dort vieleicht nicht so nett mit Fehlern umgegangen wird.
Daher ist zu empfehlen, erstmal den Treiber auf entstehende Fehler zu fragen, dann die Befehle mal mit der Manpage ab zu gleichen und dann die Parameter auf falsche Inhalte zu prüfen.
VBO sind nicht so einfacher wie der rest von OpenGL, daher kann man hier schnell mal ein Fehler machen, wenn man sich nicht an die Manpage hält und der Treiber einem nicht den Fehler um die Ohren haut.
Oft sind es kleinigkeiten, wie falsche targets disabled/enabled oder Objekte gebunden.
Ein klassiker ist mehr zu rendern, als man an Daten zur verfügung stellt.

_________________
"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: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 14:31 
Offline
DGL Member

Registriert: Do Mär 21, 2013 14:57
Beiträge: 51
Programmiersprache: C#,C++
Okay, aber wie frage ich beim Treiber an auf entsprechende Fehler. (hin noch frisch in der opengl-welt)

_________________
_______________________________________
Lets move over mountains and through valleys:
GL.Map2(,,,,,,,,,)
GL.MapGrid2(,,,,,,,,,)
GL.EvalMesh2(,,,,,,,,,)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 15:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Als ich vorhin den Beitrag geschrieben habe stand doch definitiv noch ein this.GenVBOWoundTube() im ersten Teil der if-Abfrage in der DrawWoundTube()-Funktion.
Bin ich jetzt verrückt?

_________________
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: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 16:22 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Litefora hat geschrieben:
Kann es sein, dass es vllt. an der Größe des Arrays liegt? Denn im Laufe des Programmes


ich denke das kann ausgeschlossen werden, ich rendere bis zu Bild
vertices, die framerate geht dabei runter auf 5-20 je nach rechner.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO´s und Grafikkarten
BeitragVerfasst: Di Mai 28, 2013 17:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
OpenGL Funktion zum Fehler abfragen.
http://www.opengl.org/wiki/GLAPI/glGetError
OpenGL Debugger, der einfach glGetError hooked und ein bischen komfortabler ist.
http://www.gremedy.com/download.php

_________________
"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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 35 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.199s | 19 Queries | GZIP : On ]