2009-04-22 2 views
6

현재 두 번째 스레드의 메모리에 이미지를로드하고 있고 디스플레이 루프 중에 (텍스처로드가 필요한 경우) 텍스처를로드합니다.OpenGL에서 텍스처를 동적으로로드하는 좋은 방법은 무엇입니까?

OpenGL에서 싫어하기 때문에 두 번째 스레드에서 텍스처를로드 할 수 없음을 발견했습니다. 아마도 이것은 가능하지만 잘못된 것이 었습니다. 실제로 가능하다면 수정하십시오.

내 실패가 유효한 경우 - 렌더링 루프를 방해하지 않고 텍스처를로드하려면 어떻게해야합니까? 현재 텍스처는 메모리에서로드하는 데 약 1 초가 걸리고, 이것이 주요한 문제는 아니지만 사용자에게 약간 자극적 일 수 있습니다.

+0

시스템 메모리에서 VRAM에 텍스처를로드하는 데 매우 긴 시간이 걸릴 것 같습니다. 얼마나 큰데 OpenGL에서 밉맵 레벨을 생성합니까? –

+0

매우 커서 의료용 이미지입니다. –

답변

4

파일을 읽으려는 도구를 사용하여 원하는 모든 스레드의 디스크에서 메모리로 텍스처를로드 할 수 있습니다.

그러나 OpenGL에 바인딩 할 때 해당 OpenGL 컨텍스트의 렌더링과 동일한 스레드에서 처리해야합니다. 즉, this discussion은 두 번째 스레드에서 PBO를 사용하는 것이 옵션이며 프로세스 속도를 높일 수 있다고 제안합니다.

+0

첫 번째 단락이 도움이되지 않으므로, 내가 말한 것을 반복하겠습니다.)하지만 두 번째 단락은 매우 도움이됩니다. 링크를 이용해 주셔서 감사합니다! 나는 그것을 확실히 확인해 보겠습니다 :) –

+0

당신이 거기에서하고 있던 일이 유효하다는 것을 말하면서 - 나는 당신이 그것을 어떻게 쓴 것인지 확실하지 않았습니다. 행운을 빕니다! –

+0

알기. 감사! :) –

1

디스크의 텍스처를 원하는 스레드 수만큼 RAM에로드 할 수 있지만 OpenGL은 Reed의 답변에서 언급 한 이유로 여러 스레드에서 VRAM에 업로드하지 않습니다.

디스크에서로드하는 것이 가장 느린 부분 인 경우 스레드에 넣기를 원할 것입니다. 로딩 스레드는 업로드 될 텍스처의 큐를 구축하고,이 큐는 GL 컨텍스트를 소유하는 스레드에 의해 소비됩니다 (그러나 다양한 스레드에 의한 해당 큐에 대한 액세스가 중요 함). 또한 프레임 당 N 텍스처를 업로드하는 비 스레드 방식을 고려할 수 있습니다. 여기서 N은 렌더링 속도를 너무 느리게하지 않는 숫자입니다.

+0

@ Justin, 답변 시간을내어 주셔서 감사합니다. 아마 나의 질문은 틀리게 말로 나타낸다; 현재 두 번째 스레드에서 부하가 많이 발생합니다 (일부 이미지 처리가 있기 때문에로드하는 데 약 10 초 정도 소요됩니다). 그런 다음 GLUT 루프 중에 픽셀을 VRAM으로 복사하는 데 짧은 시간이 걸립니다. 간단히 말해서 사용자 경험면에서 "불편한"시간이 걸립니다. –

+0

오키, 의미가 있습니다 - 당신을 위해 무엇이 효과가 있는지 알아낼 때 여기에 답변을 게시하십시오! – Justicle

관련 문제