2014-10-22 3 views
0

텍스처가있는 객체를로드하는 스레드를 거의 만들지 않지만 작동하지 않습니다. 각 스레드에서 새 OpenGL 컨텍스트를 만들어야한다는 것을 읽었지만 프로그램을 실행하면 프로그램이 충돌합니다. 다른 방법이 있나요?OpenGL에서로드하는 다중 스레드 객체

저는 무료 GLUT를 사용합니다. 이 내가 스레드에서 사용하고자하는 기능은 다음과 같습니다 다른 스레드에서 호출 할 수있는 사람들의

glGenBuffers() 
glBindBuffer() 
glBufferData() 
glGenTextures() 
glBindTexture()  
glTexImage2D() 
glGenerateMipmap() 
glTexParameteri() 
glTexEnvi() 

답변

3

없음. 다른 스레드에서 다른 연결된 OpenGL 컨텍스트를 만들지 만 단순하지는 않습니다.

다른 스레드의 메모리에 객체를 생성 한 다음 주 스레드가 VBO에 객체를 덤프하는 것이 더 간단합니다. 로드 스레드가 신호를 보낸 후에

또 다른 옵션은 먼저 주 스레드에서 버퍼를 만들고 할당하고 glMapBuffer을 사용하여 (다른 스레드에서도) 쓸 수있는 포인터를 얻고로드 스레드가 데이터를 거기에 저장하고 완료되면 신호를 보냅니다. 그 후에 주 스레드는 그것을 매핑 해제 할 수 있습니다.

+0

그래서 GLUT에서 새로운 컨텍스트를 만드는 방법은 무엇입니까? 로드 기능을 다시 작성하고 싶지 않습니다. – Klapek

+1

GLUT는 지정된 컨텍스트 관리를 제공하지 않습니다. 창을 만들 때 확실히 수행하지만 API에 공개하지는 않습니다. 정말로 원한다면 직접 WGL/GLX/AGL이나 SDL/glfw/etc를 사용할 수 있습니다. 그것은 당신에게 성과상의 혜택을주지는 않을 것입니다. 또한 컨텍스트 간에는 거의 공유 할 수있는 것이 거의 없으며 상태는 분명히 그 중 하나가 아니므로 '바인딩'과 'texenv'를 여러 스레드에서 수행 할 수 없습니다. – keltar

+0

@keltar하지만 다중 스레드 로딩에 필요한 버퍼 객체를 공유 할 수 있습니다. –