2012-03-06 3 views
0

저는 OpenGL을 사용하여 버퍼를 사용하여 비디오 메모리에 정점 데이터를 저장하고 있습니다. 효율성/편의성을 위해, 나는 비디오 메모리의 큰 덩어리를 할당하고, 필요할 때 청크를 예약한다. 사용중인 세 가지 데이터 구조가 있습니다 :메모리 관리 : 해당 구조체의 이름을

  • 버퍼 자체입니다.
  • 버퍼의 "청크"- 버퍼 내의 연속적인 메모리 블록.
  • 일반 청크 내의 "skippy chunk". OpenGL을 사용하면 정점 속성을 인터레이스 할 수 있으며 이러한 "skippy 청크"를 사용하여 여러 속성이 청크/버퍼 내에서 함께 짜여진 모양을 설명 할 수 있습니다.

이제는 "버퍼"가 첫 번째 데이터 구조에 적합한 이름이지만 은 무엇입니까? 나는 기술적 인 용어가 있다고 가정하지만, 그것을 모르고 그것을 찾는 법을 모른다. ...

그리고 나의 스케치 된 설명을 백업하기위한 메모리 레이아웃 예가있다. 속성 유형 : 색상, 정점 및 법선) :

+--+--+--+--+--+--+--+--+--+--+--+ 
|c1|c2|c3|c4|c5|v1|n1|v2|n2|v3|n3| 
+--+--+--+--+--+--+--+--+--+--+--+ 
|------------Buffer--------------| <- Buffer Class 
|----chunk1----|------chunk2-----| <- "Chunk" classes 
       |--| |--| |--| <- "Skippy Chunk" class (vertices) 
        |--| |--| |--| <- "Skippy Chunk" class (normals) 

미리 감사드립니다.

+0

OpenGL 설명서에서 무엇이라고 부릅니까? – cdeszaq

+1

@cdeszaq : 이들은 사용자 정의 구조이며 OpenGL 자체는 버퍼 객체의 내부 구조를 인식하지 못합니다. – datenwolf

답변

1

"skippy 청크"가있는 부분은 interleaved arrays과 비슷합니다. 이러한 데이터 (정점, 텍스처 좌표, 법선, 색상 등)를 선형 메모리 ("버퍼")에 섞어서 기본 주소, 오프셋 및 스트라이드를 사용하여 액세스하는 것이 일반적입니다.

+0

그게 내가하려는 일이지만 용어에 대해 명확하지 않습니다. "인터리브 어레이"는 전체 "청크"를 의미하며 각 "스키피 청크"는 인터리브 된 배열의 구성원 (또는 스레드)입니까? 또는 각 "스키피 청크"자체는 인터리브 된 배열입니까? –

+0

예를 들어 * chunk2 *는 인터리브 된 배열이라고 말할 수 있습니다. * 버퍼 *가 어떻게 구성되어 있는지 - 다른 말로하면 메모리 레이아웃이 어떻게 보이는지 * N * 바이트 색상 c1 ~ cN, * K * 바이트 v1, n1 ~ vN, cN - 완전히 당신에게 달려 있으며 AFAIK가 있습니다. 이에 대한 특별한 용어가 아닙니다. –

+0

또 다른 메모에서, 나는 (CUDA에서 적어도) 정점을 하나씩 배열 한 다음 법선, 색상 등을 정렬하는 것이 더 효율적이라고 생각합니다. 귀하의 주행 거리는 다양 할 수 있으므로 성능 문제가 발생하면 벤치 마크가 처음입니다 :) –

1

버퍼 덩어리이 실제로 가장 일반적인 이름입니다.

+0

니스 - 고마워요! 그것은 처음으로 돌보는 사람입니다. –