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

Aktuelle Zeit: Di Jul 15, 2025 11:23

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jun 13, 2007 14:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

nen freund hat ein problem mit Java und OpenGL.. er benutzt JOGL. Funktioniert soweit eigentlich alles ganz gut (VBOs etc gehen super), nur.. bei manchen sachen schmiert die JRE einfach ab.

z.B. wenn er:
Code:
  1. glEnable(GL_LIGHTING);

aufruft oder einen glsl shader erstellen will... die Fehlermeldung ist dann diehier:

Zitat:
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x690e35d2, pid=5452, tid=1132
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_01-b06 mixed mode, sharing)
# Problematic frame:
# C [atioglxx.dll+0xe35d2]
#
# An error report file with more information is saved as hs_err_pid5452.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp


Das ganze passiert auf nem Notebook mit einer ATI Mobility Radeon X700 und neuesten Catalyst Treibern (7.4)..
Hat irgendwer ne idee was da das problem sein könnte?

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 13, 2007 15:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Kann ein JOGL Problem oder auch vom ATI Treiber. Eigentlich funktioniert GL_LIGHTING auch unter JOGL...was sagt denn sein Errorlog oder glError()? Müsste theoretisch ja noch was vor dem Crash ausgeben können.

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 13, 2007 15:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

haben grad rausgefunden das es wohl doch am VBO liegt.. haben das ganze mal auf nem normalen rechner mit ner nVidia karte probiert, da ist es sofort beim zeichnen vom VBO abgeschmiert.

Das merkwürdige ist.. auf dem Notebook wird der VBO solange korrekt gezeichnet, bis der Shader generiert wird, oder das Lighting aktiviert wird...
Er schmiert dann immer bei der funktion glDrawArrays ab..

Dashier ist der komplette code von der VBO erstellung:

Code:
  1. package main;
  2.  
  3. import java.awt.geom.Point2D;
  4. import java.nio.Buffer;
  5. import java.nio.FloatBuffer;
  6. import java.util.Vector;
  7.  
  8. import javax.media.opengl.GL;
  9.  
  10. import com.sun.opengl.util.BufferUtil;
  11.  
  12. public class GLObject {
  13.     Vector<GLVertex> vertexArray;
  14.     Vector<GLVertex> normalArray;
  15.     Vector<Point2D.Double> textureCoordArray;
  16.    
  17.     int vbo = 0, normalVbo = 0;
  18.     int polycount = 0;
  19.     boolean vboCreated = false;
  20.    
  21.     GL gl;
  22.    
  23.     public GLObject(GL gl){
  24.         vertexArray = new Vector<GLVertex>();
  25.         normalArray = new Vector<GLVertex>();
  26.         textureCoordArray = new Vector<Point2D.Double>();
  27.        
  28.         this.gl = gl;
  29.     }
  30.    
  31.     public int getPolycount(){
  32.         return vertexArray.size()/3;
  33.     }
  34.    
  35.     public void createVbo(){
  36.         int[] intBuffer = new int[1];
  37.         gl.glGenBuffersARB(1,intBuffer,0);
  38.         gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB,intBuffer[0]);
  39.        
  40.         FloatBuffer vertices;
  41.         vertices = BufferUtil.newFloatBuffer(vertexArray.size() * 3);
  42.         for(GLVertex vertex: vertexArray){
  43.             vertices.put((float)vertex.getX());
  44.             vertices.put((float)vertex.getY());
  45.             vertices.put((float)vertex.getZ());
  46.         }     
  47.         vertices.flip();
  48.        
  49.         gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, vertexArray.size() * 3 * BufferUtil.SIZEOF_FLOAT, vertices, GL.GL_STATIC_DRAW_ARB);
  50.         vertices = null;
  51.         vbo = intBuffer[0];
  52.                
  53.     }
  54.    
  55.     public void drawVbo(){
  56.        
  57.         if (gl.glIsBufferARB(vbo)) {
  58.            
  59.             gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, vbo);
  60.             gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
  61.            
  62.             gl.glDrawArrays(GL.GL_TRIANGLES, 0, vertexArray.size()); // Hier schmiert er ab.. wenn wir die zeile auskommentieren geht alles.
  63.         }
  64.     }
  65. }


Aya~

PS: gl.glEnableClientState(GL.GL_VERTEX_ARRAY); wurde auch aufgerufen bei der initialisierung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 14, 2007 06:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

nach dem Füllen des FloatBuffers und vor der Übergabe an gl.glBufferDataARB muss man glaub ich noch einen rewind()-Aufruf machen.

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 14, 2007 09:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
dj3hut1 hat geschrieben:
nach dem Füllen des FloatBuffers und vor der Übergabe an gl.glBufferDataARB muss man glaub ich noch einen rewind()-Aufruf machen.


Hi, das hatte ich auch schon probiert (anstelle des .flip()).. gleicher fehler :(
glGetError() hab ich auch mal nach jeder zeile aufgerufen, nirgendwo kommt ein fehler, und das glGetError nach glDrawArray wird nie aufgerufen weil er davor crasht..

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 14, 2007 18:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
hallo,

und was ist mit dem Aufruf gl.glDrawArrays(GL.GL_TRIANGLES, 0, vertexArray.size()/3); ?

Viele Grüße
dj3hut1


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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 | 16 Queries | GZIP : On ]