If I create my display in one thread, then want to render to it from another thread how would I accomplish this. I think it has something to do with GLContext.useContext(), but I cannot figure out how.
well here is what I have tried with no luck,
semi-psuedo code
Thread 1
-------------------
createDisplay()
createThread2(Display.getDrawable())
Thread2.run()
Thread 2
-----------------------------------
render(Drawable d) //value from Display.getDrawable() in thread 1
GLContext.useContext(d.getContext())
GLContext.useContext(c);
GL11.glClearColor(0,0,0,0);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
Display.update()
endRender
Well I got some help on #LWJGL , ended up I was doing a few minor things wrong. But there a few things I don't quite grasp yet.
The steps I used to make this work are listed as follows
1) I grabbed the drawable (surface?) from within the main thread with Display.getDrawable() and saved it off into a variable to send to thread2
2) I released the context from the Display within the main thread with Display.releaseContext()
3) I then start the new thread (thread2) and then pass it the drawable surface that I had gotten in step 1
4) within thread2 I used GLContext.useContext(drawable.getContext())
5) made the context the current context with by calling Display.makeCurrent()
6) at this point I am now able to render into the window from thread2
I am confused about why this works, it seems I getting the drawable surface from display, then just turning around and re-attaching to Display. I can't quite see how this ties in with the GL11 calls and different threads.
Hello.. Is there any way to do what xaster says, including the posibility of rendering from the main thread?
The idea is to do a 'loading' screen while all the resources are being loaded (sending messages to the second thread indicating what resources are being loaded).
Thanks in advance
you can use different threads, have a look at the Display.releaseContext() and Display.makeCurrent().
Quote from: javalwjgl on April 09, 2008, 18:05:48
you can use different threads, have a look at the Display.releaseContext() and Display.makeCurrent().
I already checked the wiki about using releaseContext() and makeCurrent(), but i want to know if there is any way of not releasing and making current all the time during the load of the resources.
Also, is there any way of checking if the thread in which i am, is the current?
Thanks
Quote from: vladl on April 09, 2008, 18:56:25
Also, is there any way of checking if the thread in which i am, is the current?
Yes. Introduce a boolean named isCurrent into your threads and toggle it when you call releaseContext() and makeCurrent() ;)