OpenGL / Jogle Code Reveiw zur Performance Verbesserung

turing

Mitglied
Hallo Forum,

nach langer Pause steht mal wieder 3D auf dem Plan. Konkret geht es darum zu evaluieren, ob ein bestimmes Produkt bei uns im Hause auf 3D portiert werden kann. Ich habe dazu ein kleines Test-Programm geschrieben, dass die Größenordung etwas vereinfacht darstellt: Gegeben sind ca 15.000 Objekte, die 'recht' einfache Vertex-Daten besitzen, aber dennoch hat jedes Objekt grundsätzlich eine andere Forum. Jedes Objekt hat auch eine eigene Größe, Position und Rotation die sich zur Laufzeit ändert oder ändern kann (diese Werte werden an anderer Stelle geändert, das soll die Anzeige nicht interessieren, die hat es nur zu rendern).

Ich habe das Ganze in Jogl mit Indexed VBOs zusammengebaut und mal 15.000 Würfel gerendert (stimmt ja nicht ganz, ist für jedes Objekt eine eigenen Kontur - aber es ist ja auch nur eine erste Evaluation). An geeigneter Stelle wird ganz am Anfang für jedes Objekt ein VBO + IBO zusammengebaut und die Daten an die Grafikkartee übertragen (Beim Würfel also 8 Verticies und 36 Indicies). Im eigentlichen Loop fürs Rendern wird dann per for-Schleife für alle VBOs / IBOs ein glDrawElements() aufgerufen. Da die Translation, Skalierung und Rotation ja auch für jedes Objekt einzeln betrachtet werden müssen, wird ebenfalls entsprechend die MVP Matrix zusammengebaut und dass alles per Uniform an den Vertex Shader vorher übertragen. Vertex und Fragment Shader sind trivial. Hier der Code fürs Rendern:

Java:
  public void display(GLAutoDrawable drawable) {
    trackDisplay();
    GL3 gl = getGL().getGL3();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
    gl.glEnableVertexAttribArray(0);
    gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_LINE); // only for testing
    for (GlObject object : objects) {
      float[] matMvp = makeModelViewProjectionMatrix(object);
      gl.glUniformMatrix4fv(mvpLocation, 1, false, matMvp, 0);
      gl.glUniform3f(colorLocation, 1, 1, 0);
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, object.getVbo());
      gl.glVertexAttribPointer(0, 3, GL.GL_FLOAT, false, 0, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, object.getIbo());
      gl.glDrawElements(GL.GL_TRIANGLES, object.getNum(), GL.GL_UNSIGNED_INT, 0);
    }
  gl.glDisableVertexAttribArray(0);
  }

Das funktioniert alles auch gut, auch mit Mouse-Camera etc. Aber mit meiner AMD Radeon HD 8790M komme ich gerade einmal auf 21-22 frames pro Sekunde (der Wert wird einmal pro Sekunde ausgegeben).

Code:
14 (71 ms per frame for 15625 objects)
22 (45 ms per frame for 15625 objects)
21 (47 ms per frame for 15625 objects)
22 (45 ms per frame for 15625 objects)
21 (47 ms per frame for 15625 objects)
22 (45 ms per frame for 15625 objects)
21 (47 ms per frame for 15625 objects)
22 (45 ms per frame for 15625 objects)
21 (47 ms per frame for 15625 objects)

Das erscheintt mir wenig. Die Garfikkarte ist zwar kaum eine Gamer Karte und betagt, aber ich hätte erwartet, dass man hier wesentlich mehr rausholen würde.... Meine Frage also an die Experten: Ist der obige Ansatz total verkehrt? Ist der Code einfach schlecht?[/code]
 

turing

Mitglied
PS: Nehme ich die Berechnung der MVP Matrix raus sowie die beiden Uniform-Übertragungen heraus, sind eine Handvoll mehr Frames pro Sekunde drin. Weit von meinem Ziel stabbil bei 60 FPS zu laufen.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
Z Vlcj in OpenGL Spiele- und Multimedia-Programmierung 4
coolian opengl von scale in breite und höhe konvertieren Spiele- und Multimedia-Programmierung 23
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
K Messdaten in Echtzeit darstellen in OpenGL Spiele- und Multimedia-Programmierung 4
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
KeexZDeveoper Fehler von OpenGL Spiele- und Multimedia-Programmierung 1
Kim_Dotcom libGDX - opengl Fehler Spiele- und Multimedia-Programmierung 5
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
RalleYTN OpenGL Context im JFrame? Spiele- und Multimedia-Programmierung 0
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
F OpenGL - Transparenz mit Depth Peeling Spiele- und Multimedia-Programmierung 0
K LibGdx, Loadingscreen & Opengl context Spiele- und Multimedia-Programmierung 3
turing OpenGL VBO and Unfiform Handling Spiele- und Multimedia-Programmierung 1
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
T opengl und Android.... Spiele- und Multimedia-Programmierung 3
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
T Welche OpenGL-Version soll ich verwenden? Spiele- und Multimedia-Programmierung 2
O OpenGL - Texture falsch herum Spiele- und Multimedia-Programmierung 3
Gregorrr OpenGL & RCP/SWT Spiele- und Multimedia-Programmierung 3
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
K Android: OpenGL render performance Tipps ? Spiele- und Multimedia-Programmierung 4
lumo opengl, sprites/tiles Spiele- und Multimedia-Programmierung 8
M OpenGL: Rectangle dort erstellen wo ich hintippe Spiele- und Multimedia-Programmierung 2
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
V Keine Ahnung von OpenGL! Hilfe wäre lieb! Spiele- und Multimedia-Programmierung 8
T 3D Stadtmodell mit OpenGL Spiele- und Multimedia-Programmierung 5
TheWhiteShadow OpenGL glDrawArrays Bufferfehler Spiele- und Multimedia-Programmierung 10
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
S OpenGL Textur unsauber Spiele- und Multimedia-Programmierung 2
T OpenGL ES verschwindene Vertices Spiele- und Multimedia-Programmierung 2
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
R OpenGL Textur mit verschiedenen bit depths Spiele- und Multimedia-Programmierung 6
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
A LWJGL/OpenGL und Text Spiele- und Multimedia-Programmierung 8
Helgon OpenGL vernünftige Tutorial? Spiele- und Multimedia-Programmierung 22
A OpenGL Textur und nicht Textur Spiele- und Multimedia-Programmierung 2
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
F Suche Tutorial zu "purem" OpenGL mit Java Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL + glSubTexImage2D -> Bufferproblem Spiele- und Multimedia-Programmierung 3
F OpenGL Screenshot in iMove (als Greenscreen) => Farben invertiert? Spiele- und Multimedia-Programmierung 16
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
F Mac: OpenGL Desktop-Screen aus Grafikkarte lesen Spiele- und Multimedia-Programmierung 2
F OpenGL 2D MouseClick/MouseMove Listener Spiele- und Multimedia-Programmierung 4
Kr0e Sehr schnelle Texturupdates (OpenGL) Spiele- und Multimedia-Programmierung 3
Kr0e OpenGL beliebige Texturgröße Spiele- und Multimedia-Programmierung 2
BattleMaster246 OpenGL - Transparenz Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL .. Pixel Buffer Objekt oder Frame Buffer Object? Spiele- und Multimedia-Programmierung 2
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A Problem openGL-Pipeline mit Win7? Spiele- und Multimedia-Programmierung 6
G OpenGL boolesche operation auf Rechtecke Spiele- und Multimedia-Programmierung 15
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
G API für 3d-Programmierung? OpenGL? Spiele- und Multimedia-Programmierung 12
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J Opengl Texture laden Null Pointer Exception Spiele- und Multimedia-Programmierung 6
J netbeans opengl keyPressed(KeyEvent evt) benutzen Spiele- und Multimedia-Programmierung 4
J netbeans opengl gluPerspective und gluLookAt Verständnis Spiele- und Multimedia-Programmierung 13
S glTexSubImage2D()-Fragen(Zerstörbares Terrain, OpenGL) Spiele- und Multimedia-Programmierung 3
Z Suche Tutorial zum Einstieg in OpenGl mit Java (JOGL) Spiele- und Multimedia-Programmierung 2
T Overlay in anderer OpenGL Anwendung Spiele- und Multimedia-Programmierung 4
egrath Vista OpenGL Performance Problem? Spiele- und Multimedia-Programmierung 3
Y OpenGL Spiele- und Multimedia-Programmierung 5
J opengl beispiele? Spiele- und Multimedia-Programmierung 10
D Java mit OpenGL - besser LWJGL oder JOGL? Spiele- und Multimedia-Programmierung 6
N OpenGL und DirectX - was genau ist das? Spiele- und Multimedia-Programmierung 5
C OpenGl Support für Applet (sun.java2d.opengl=True) Spiele- und Multimedia-Programmierung 3
B OpenGL oder Direct X Spiele- und Multimedia-Programmierung 9
M [JOGLE] Fadenkreuz in der Mitte des Bildschirms Spiele- und Multimedia-Programmierung 1
M pixel auslesen in JOGLE Spiele- und Multimedia-Programmierung 3
N Seltsame Exception bei Code eines Spiele-Tutorials Spiele- und Multimedia-Programmierung 6
lolzo Minecraft Minecraft: Exit Code: 0 Spiele- und Multimedia-Programmierung 3
A Code in Programm wandeln, wie? Spiele- und Multimedia-Programmierung 3
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
B Euer Feedback zu meinem Code ist gefragt Spiele- und Multimedia-Programmierung 2
F 4 Gewinnt - Code wird ignoriert Spiele- und Multimedia-Programmierung 7
H TicTacToe Code Vereinfachen Spiele- und Multimedia-Programmierung 5
A Code Verstehen Spiele- und Multimedia-Programmierung 24
N Aiken Code umwandeln Spiele- und Multimedia-Programmierung 2
S Code:250 FPS mit Fullscreenantialising 1024x768 Spiele- und Multimedia-Programmierung 10
R Verstehe Beispiel-Code nicht Spiele- und Multimedia-Programmierung 7

Ähnliche Java Themen


Oben