2012-10-13 4 views
2

OpenGL의 정점 배열 객체가 VRam에 저장되어 있습니까?OpenGL 정점 배열 객체

내가 정말로 묻는 것 : 예를 들어 Assimp를 사용하여 모델을로드 한 다음 버텍스 및 인덱스 데이터를 버텍스 배열 객체로 읽습니다. RAM에 데이터를 복사하거나 GPU에 복사합니까?

답변

10

여기에 OpenGL 용어에 대한 이해가 부족한 것으로 보입니다.

Vertex Array Objects에 "정점 및 지표 데이터"를 읽을 수 없습니다. 그들은 실제로 데이터를 저장하지 않습니다; 데이터 배열은 buffer objects에 저장됩니다. VAO 전용 참조. VAO는 OpenGL이 의미하는 것을 이해할 수 있도록 해당 버퍼의 데이터 포맷 방법을 설명합니다.

당신에 대한 client-side vertex arrays (당신이 VAOs와 클라이언트 측 정점 배열을 사용할 수 있지만, 단어 "객체"의 부족주의) 요구하는 경우는, 다음의 정의에 의해 그들은 GPU에 저장되지 않습니다. 클라이언트 측 정점 배열의 "클라이언트"는 사용자 코드입니다. IE : 할당, 소유 및 관리하는 메모리.

buffer objects의 사용에 대해 질문하는 경우 버퍼 개체 저장소는 "서버"(예 : OpenGL 구현 소유의 메모리)에 있습니다. 특정 시점에서 물리적으로 실제로 GPU에 있는지 여부는 사용자가 결정할 수있는 것이 아닙니다. 그러나 glBufferData, glBufferSubData 또는 버퍼 개체를 업데이트하는 기타 기능을 호출하면 서버에서 해당 데이터를 복사했습니다.

+0

예 전문 용어에 대한 이해가 부족합니다. 나는 방금 openGL을보기 시작했다. 나는 당신이 내가 무엇을 요구하고 있는지 이해했기 때문에 기쁘다. 버퍼 오브젝트를 할당하고 Assimp Scene 구조체에 이미 있던 데이터로 데이터를 채우는 경우, 데이터를 복제하고 시간을 낭비하게 될지 궁금합니다. – Ignoreme

+0

@ Kronos25 : 데이터를 복제하지만 "시간 낭비"가 아닙니다. 런타임 성능은 사용자가 수행 한 작업이므로 GPU에 데이터를 가져 오는 것이 중요합니다. 게다가, 당신은 장면 구조체를 업로드 한 후에 * 삭제해야합니다. –