Bonsoir à tous !

Je développe en Java avec JWJGL et j'ai développé un loader de fichiers .obj pour me former un peu à java d'une part et à opengl d'autre part.
Je souhaite effectuer le rendu du fichier en utilisant les VBOs (je l'avais déjà fait en utilisant le mode immédiat mais c'était catastrophique).

Du coup j'ai lu des tutoriels à droite à gauche (NeHe, la doc de lwjgl et d'autres) mais mon implémentation fait crasher mon application.

J'ai une classe ObjectGL qui possède une collection de Materials (une classe qui contient une liste de polygones ayant des données matérielles communes (ambiant, specular tout ça)).

Voici le code que j'utilise :
- Premièrement je génère deux ID par "materials", une pour les données et une autre pour les indices :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void genVBOS() throws IOException{
		if(GLContext.getCapabilities().GL_ARB_vertex_buffer_object){		//Si la carte supporte l'utilisation des VBO	
			for (int i = 0; i < mats.size(); i+=2) {						//Pour chaque "materials" on génère 2 ID (un pour les données, l'autres pour les indices)
				IntBuffer vbo = BufferUtils.createIntBuffer(2);
				ARBVertexBufferObject.glGenBuffersARB(vbo);
				ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, vbo.get(i));
				ARBVertexBufferObject.glBufferDataARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, vvtvn, ARBVertexBufferObject.GL_STATIC_DRAW_ARB); //On envoie les vertices, normals et coordonnées de textures
 
				ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB, vbo.get(i+1));
				ARBVertexBufferObject.glBufferDataARB(ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB, mats.get(i).getIndices(), ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB);
 
				mats.get(i).setVbo(vbo);
			}
		}
	}

Et une fois que toutes mes "materials" ont leur VBO je les affiche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void draw(){		
		for (int i = 0; i < mats.size(); i++) {
			int stride = (3+3+2)*4;
			ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, mats.get(i).getVbo().get(0));
			GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);				//Activation, si nécessaire, des différents Arrays
			int offset = 0;
			GL11.glVertexPointer(3, GL11.GL_FLOAT, stride, offset);
 
			if(normals){
				GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY);
				offset = 2 * 4;
				GL11.glTexCoordPointer(2, GL11.GL_FLOAT, stride, offset);
			}
			if(text){
				GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
				offset = (3 + 2) * 4;
				GL11.glNormalPointer(GL11.GL_FLOAT, stride, offset);
			}		
 
			ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, mats.get(i).getVbo().get(1));
			GL12.glDrawRangeElements(GL11.GL_TRIANGLES, 0, mats.get(i).getIndices().capacity(), mats.get(i).getIndices().capacity(), GL11.GL_UNSIGNED_INT, 0);
		}
 
	}
L'application crashe lors de l'appel à glDrawRangeElements(), pas d'exception levée ni rien du coup je suis un peu perdu !


Est-ce que vous voyez quelque chose qui cloche là dedans ? N'hésitez pas !
J'utilise peut-être tout cela maladroitement...
Si vous avez besoin d'autres explications n'hésitez pas

Je vous remercie d'avance pour votre aide !