2010-03-09 3 views

답변

18

다음 갱신glTexSubImage와 그 내용. 텍스처를 업데이트 할 때 전체 텍스처 또는 그 아래 사각형 만 업데이트 할 수 있습니다.

하나의 텍스처를 만들고 업데이트하는 것보다 훨씬 효율적입니다. 따라서 업데이트하려는 텍스처가있는 경우에는 항상 glTexSubImage (초기 생성 후)을 사용하십시오.

다른 기술들이 텍스처 업데이트에 적용될 수 있습니다. 예를 들어, 자세한 내용은 texture streaming에있는이 기사를 참조하십시오.

는 (원래,이 게시물 텍스처 업데이트 glMapBuffer를 사용하여 제안 - 아래의 설명을 참조하십시오.)

+0

+1하지만 마지막 문장에 동의하지 않습니다. 일반적으로 텍스처를 매핑 할 수 없습니다. 그들은 비선형 형식의 GPU쪽에 어쨌든 저장되는 경향이 있습니다. 그래서 ... SubTexture를 호출하기 전에 업로드 (버퍼 객체로)하면, GPU가 카드를 복사/뒤집을 수밖에 없습니다. 반드시 순수한 승리는 아닙니다. – Bahbar

+0

@Bahbar 매우 흥미 롭습니다. 그렇다면 주 메모리의 이미지 데이터에서 텍스처를 업데이트하는 가장 빠른 방법은 무엇입니까? 'glTexSubImage2D'를 직접 호출하면 되나요? IIRC는 glMapBuffer를 사용하여 DMA 전송을 권장 한 책 중 하나였습니다. – gavinb

+0

glTexSubImage가 아닌 glTexImage로 텍스처를 만들었다 고 생각했습니다. – genpfault

1

이름으로 "하위"와 GL의 기능은 전원의 - 2 차원에 한정되는 것은 아니다. gavinb가 지적했듯이, non-sub variant를 한 번 사용하여 전체 치수를 설정해야하지만, non-sub variant를 반복적으로 호출하는 것이 "sub"를 사용하는 것보다 느리다는 것에 동의하지 않습니다. GPU는 동일한 텍스처 ID를 사용하는 한 기존 텍스처를 그대로 자유롭게 덮어 쓸 수 있습니다.

+0

글쎄, 할 수 있겠지? 최소한, TexImage에 대한 모든 매개 변수가 이전 매개 변수와 여전히 호환되는지 확인하여 할당이 여전히 적합한지를 확인해야합니다. 이것을 가리키면, 이것은 SubTexture에 대해 의문의 여지가 없습니다. 또한 GL에서 NPOT 텍스처를 지원해야하므로 2의 거듭 제곱은 중요하지 않습니다. – Bahbar