[LWJGL] [Solved] Java has stopped working crash when rendering triangle

Im currently learning how to use VBO’s and have come across an error I just can’t seem to fix.
Im making a simple program for making models, so Im using LWJGL with AWT.

This is the error:
Java™ Platform SE binary has stopped working (In a little Window’s window)

Viewing the problem details gives me this

Problem Event Name: APPCRASH
Application Name: javaw.exe
Application Version: 7.0.510.13
Application Timestamp: 52b25e38
Fault Module Name: StackHash_b4ee
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 000000000615ff3d
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 4105
Additional Information 1: b4ee
Additional Information 2: b4ee5de6a2322745523997a782b35692
Additional Information 3: 277e
Additional Information 4: 277e19c30fbd5f6bb531ec9e027c37c3

Looking up error code c0000005 tells me its an “Access Permissions” issue

By trial and error I found the crash happening when I drew my VBO’s

[spoiler]

public static void drawQuad(int handles[]) {


		for(int i =0;i < handles.length; i ++){
		
		//	System.out.println("Drawing handle : " + handles[i]);
		
		GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, handles[i]);
		
		glVertexPointer(3, GL_FLOAT, /* stride * */(3 * 2) << 2, /* offset * */
				0 << 2); // float at index 0
		glColorPointer(3, GL_FLOAT, /* stride * */(3 * 2) << 2, /* offset * */
				(3 * 1) << 2); // float at index 3

		glEnableClientState(GL_VERTEX_ARRAY);
		glEnableClientState(GL_COLOR_ARRAY);

		 
		glDrawArrays(GL_TRIANGLES, 0, 3 /* elements */); //Commenting this out stops the crash?????

		glDisableClientState(GL_COLOR_ARRAY);
		glDisableClientState(GL_VERTEX_ARRAY);
		
		
		System.out.println("Finsihed rendering handle : " +(handles[i]));
		}
		
	

	}

[/spoiler]

Because it may be relevant how I create my VBO’s

[spoiler]

	public static int[] createQuad(Vector3f vec1, Vector3f vec2, Vector3f vec3,
			Vector3f vec4, Vector3f col) {

		int[] handles = new int[2];

		FloatBuffer triOne = BufferUtils.createFloatBuffer(6 * 3);

		triOne.put(vec1.x).put(vec1.y).put(vec1.z); // v
		triOne.put(col.x).put(col.y).put(col.z); // c

		triOne.put(vec2.x).put(vec2.y).put(vec2.z); // v
		triOne.put(col.x).put(col.y).put(col.z); // c

		triOne.put(vec4.x).put(vec4.y).put(vec4.z); // v
		triOne.put(col.x).put(col.y).put(col.z); // c

		int handle1 = GL15.glGenBuffers(); // Create an ID for a buffered object
		GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, handle1); //Bind any incoming info to this buffer id
		GL15.glBufferData(GL15.GL_ARRAY_BUFFER, triOne, GL15.GL_STATIC_DRAW); //Attach the float buffer
		GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // Unbind the object

		handles[0] = handle1;

		FloatBuffer triTwo = BufferUtils.createFloatBuffer(6 * 3);

		triTwo.put(vec1.x).put(vec1.y).put(vec1.z); // v
		triTwo.put(col.x).put(col.y).put(col.z); // c

		triTwo.put(vec3.x).put(vec3.y).put(vec3.z); // v
		triTwo.put(col.x).put(col.y).put(col.z); // c

		triTwo.put(vec4.x).put(vec4.y).put(vec4.z); // v
		triTwo.put(col.x).put(col.y).put(col.z); // c

		triTwo.flip();

		int handle2 = GL15.glGenBuffers(); 
		
		GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, handle2); 
		GL15.glBufferData(GL15.GL_ARRAY_BUFFER, triTwo, GL15.GL_STATIC_DRAW);
		GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

		handles[1] = handle2;
		
		System.out.println("Created Handle 1 : " + handle1 + " handle 2 : " + handle2);
		
		return handles;
	}

[/spoiler]

Because Im using AWT I have two frames, one that holds a canvas and another that holds all my buttons and such. I used the Display.setParent() to attach the display to the canvas, and then used a normal render loop : [spoiler]

while (!Display.isCloseRequested()) {

			preRender();
			System.out.println("Pre render Done");
			
			render(); //Something here crashes it
			System.out.println("Render Done");
			
			Display.update();
			System.out.println("Update Done");
			
			Display.sync(60);
			System.out.println("Sync Done");
			
		}

[/spoiler]

This is my console after the program crashes : [spoiler]

We started
Created Handle 1 : 1 handle 2 : 2
Created Handle 1 : 3-21 handle 2 : 4-22 (Omitted for space)
Created Handle 1 : 23 handle 2 : 24
Pre render Done
Finsihed rendering handle : 1
Finsihed rendering handle : 2-23 (Omitted for space)
Finsihed rendering handle : 24
Render Done
Update Done
Sync Done
Pre render Done
Finsihed rendering handle : 1
Finsihed rendering handle : 2-23 (Omitted for space)
Finsihed rendering handle : 24
Render Done

[/spoiler]

When I run the program on my Laptop it works just fine (Every other triangle doesn’t render but I’m not worried about that right now)
I have tried with LWJGL version 2.9.1, 2.9.2 and 2.9.0
Any help would be greatly appreciated

//Off topic, how do I make spoiler tags hide code tags?

Try printing out glGetError after every call when rendering.

:confused: Calling GL11.glGetError() causes it to crash?

Well if I place get error after I draw a single triangle it will crash with out drawing anything or printing out the value
If I place get error before I draw, I get error 0 and then it crashes right away with out rendering anything

I think you missed calling triOne.flip

Huh, and that fixed it all. Thank you very much. Odd that it still ran on my Laptop and not my computer, maybe because it doesn’t have a dedicated GPU?

Anyways thank you very much.

I think all drivers have their own way or working. One might crash when there is nothing in the buffer, the other might ignore it as it was empty.