2012-05-10 8 views
1

OpenGL ES 저장 메커니즘에서 intrested입니다. 모든 데이터를 자체 메모리에 복사하거나 데이터에 대한 포인터 만 저장합니까? 대처가 완료되지 않은 경우 (논리적 인 것), VBO가 사용되는 이유보다.OpenGL (ES)가 텍스처/정점을 저장하는 방법

답변

1

중요한 것은 OpenGL (ES)이 클라이언트 - 서버 모델로 빌드됨을 기억하는 것입니다. 즉, 일반적으로 "CPU"는 클라이언트이고 "GPU"는 서버입니다.

이 두 가지는 서로 다른 메모리 저장 공간을 가지고 있습니다. "정점"을 "CPU"에서 "GPU"로 보내야하는 정점을 그리려면 시스템 메모리에서 GPU 메모리로 데이터를 복사해야합니다. 그림을 그리기 위해 반복해서 보내야하는 각 프레임 ... 물론 느립니다.

VBO는 GPU에 버텍스 데이터를 저장 한 다음 단순히 복사를 피하는 방법입니다. "그리기"명령을 추가하면 데이터는 시스템 메모리가 아닌 GPU 메모리에서 가져옵니다. 그것은 훨씬 더 빠를 것입니다.

+0

감사합니다. 내가 필요한 것. 텍스처에도 적용됩니까? 매번 바인딩 된 텍스처를 그릴 때마다 GPP로 복사됩니까? – RawCode

+1

텍스처는 glTexImage * 또는 glCopyTexImage ... 스타일 함수로 GPU로 전송됩니다. 그래서 텍스쳐는 VBOS와 유사합니다 ... 그러나 VBOS는 사용법이 약간 일반적입니다. CUDA/OpenCL을 살펴보면 GPU가 점점 더 일반화되고 메모리 풀에 대한 완전한 액세스 권한을 얻게된다는 것을 알게 될 것입니다. 사용자가이를 통해 사용자 정의 방식으로 사용할 수 있습니다. – fen

+0

@fen 'glCopyTexImage'는 프레임 버퍼에서 텍스처 이미지를 가져 오므로 CPU-GPU 복사가 발생해서는 안됩니다. –

0

텍스처 및 버퍼 객체는 궁극적으로 서로 관련이 없습니다. 어떤 직접적인 관계도 없습니다.

그러나 일부 유사점이 있습니다. 둘 다 OpenGL에서 할당 한 메모리를 나타냅니다. 따라서 업로드하는 데이터는 복사입니다. 심지어 텍스처.

관련 문제