OpenGL에서 밉맵을 사용하고 싶을 때마다 최고 해상도 비트 맵을 밉맵 레벨 0으로 업로드 한 다음 높은 밉맵 레벨에서 낮은 해상도 비트 맵을 업로드해야합니다.opengl : 텍스처에 고해상도 밉맵 추가
저해상도 밉맵뿐만 아니라 고해상도 밉맵을 추가 할 수 있기를 원했을 것입니다. 현재 내가 아는 유일한 하드웨어 방법은 새로운 밉맵 텍스처를 시작하고 이전에 업로드 한 모든 비트 맵을 다시 업로드하는 것입니다.
다른 하드웨어 방법은 없나요?
편집 : 텍스처 생성시 모든 텍스처 밉맵 레벨에 대해 메모리를 할당 할 OpenGL은 사실을 변경하지 마십시오 GL_TEXTURE_BASE_LEVEL 및 GL_TEXTURE_MAX_LEVEL 나타납니다
, 그것은 알고 불가능하기 때문에 따라서이 경우에 사용 할 수없는 텍스처 것이다 더 높은 해상도의 밉맵이 필요하고 그렇지 않은 경우에는 극단적 인 메모리 낭비가 발생할 수 있습니다.
하드웨어에서 이것을 수행하는 유일한 방법은 새로 생성 된 고해상도 밉맵을 밉맵 레벨 0에서 다시 생성 한 다음 이전의 모든 저해상도 밉맵을 낮은 밉맵 레벨로 복사하는 것입니다.
필자가 아는 한, 유일한 방법은 이전에 생성 된 밉맵 레벨을 메모리에 다시 저장하는 것입니다 (이 많은 메모리를 낭비하지 않아도 됨). 모든 밉맵 레벨을 재생성합니다 너무 느리다) gltexsubimage2d를 사용하여 이전 텍스처 밉맵 레벨을 시스템 메모리에 복사 한 다음 새로운 텍스처에 업로드 (느리게 진행됨)하거나 이전 텍스처에서 새로운 텍스처로 바로 복사합니다.
그래서 텍스처의 선택된 밉맵을 "glcopytexture (texture_id_1, texture_mipmap_1, texture_id_2, texture_mipmap_2);"와 같은 다른 텍스처의 밉맵으로 복사하는 방법이 있습니까?
EDIT2 :이 정확히 본 계약의 요건 (https://www.opengl.org/wiki/Texture_Storage#Texture_copy)하지만 하나는 최대 10 세 컴퓨터의 지원입니다하지
그것은 다소 최근의 확장이 보인다 (확장 ~ 2012 년 ~ 2009되었다 코어) .
일반적으로 드라이버가 전체 텍스처를 다시 할당해야 함을 의미합니다 저해상도 밉맵을 만들 때 더 높은 해상도를 고려하지 않았습니다. –
이 시점에서이 이전 설명이 텍스처 메모리를 낭비하지 않는 유일한 하드웨어 대답 일 가능성이 높습니다. 나는 발견 된 정보로 초기 질문에 후속 질문을 추가하고있다. – Marladu
@Marladu : 실제로, 현대 GPU에는 다른 가능성, 특히 [GL_ARB_sparse_texture] (https://www.opengl.org/registry/specs/ARB/sparse_texture.txt)가 있습니다. 물론 이것은 10 살짜리 시스템에 대해 원하는 것이 아닙니다. – derhass