2011-01-03 10 views
3

저는 Open GL에서 초보자입니다.열린 GL 텍스처 압축

런타임에 텍스처 압축을해야합니까?

확실히, 작동하는 방식은 빌드시 큰 텍스처 파일을 압축하는 것입니다. 런타임시 필요에 따라 압축 된 텍스처 파일의 일부를 확장하여 서피스에 적용합니다.

텍스처 데이터를 확장하고 런타임에 압축해야하는 (신뢰할 수있는) 환경이 있습니까?

감사합니다.

답변

5

압축 된 이미지 형식 (예 : JPEG 또는 이미지가 포함 된 zip 파일)이나 압축 된 형식 (예 : DXT1 등)에 대해 이야기하고 있습니까? DXT와 같은 압축 된 텍스처를 런타임에 압축을 풀 필요가없는 경우 그래픽 카드는 텍스처를 샘플링 할 때 즉시 수행 할 수 있습니다.

모든 애셋을 사전 컴파일 할 수있는 게임의 경우 일반적으로 (자산) 빌드시 DXT 압축과 같은 것을 적용하여 텍스처 압축의 모든 이점을 얻을 수 있습니다 (로드 시간 단축, 메모리 대역폭 사용 등)을 수행 할 수 있습니다. 즉, 압축 된 텍스처로 렌더링하려는 모든 상황에서 사용자가 미리 사용할 이미지에 대한 액세스 권한이없는 경우 (어쩌면 사용자가 자신의 컴퓨터 또는 기타 장치에서 이미지 파일을 선택할 수있게했을 때) 런타임에 압축을 수행 할 수밖에 없습니다.

편집 :

당신은 '형식'매개 변수에 대해 당신이 가지고있는 소스 이미지 (GL_RGBA 등)의 실제 형식을 지정 glTexImage2D를 호출하는 것입니다 런타임에 DXT 압축을 할 것이다 방법과 압축 포맷 카드가 gl_ext_texture_compression_s3tc 확장을 지원한다고 가정하면 DXT1의 경우 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT와 같은 'internal format'매개 변수가 필요합니다.

텍스처 데이터를 미리 압축 한 경우 glCompressedTexImage2D를 사용하여 직접로드 할 수 있습니다.

+0

저는 압축 된 형식에 대해서 이야기하고 있습니다. 압축 된 그림 형식이 아닌 jpg 및 png에 대해서 이야기하고 있습니다. 유용한 답변 주셔서 감사합니다 - 런타임에 압축을 수행해야하는 가장 일반적인 (? 만) 장소는 런타임에 텍스처를 선택할 때입니다. 그래픽 드라이버가이를 지원하므로 명시 적으로 압축을 풀 필요가 없습니다. –

+0

텍스처를 압축하는 비교적 비싼 작업을 어디서 오히려 수행 할 것인가에 대한 상식적인 질문입니다. 미리, 오프라인으로, 또는 런타임에 눈에 띄는 일시 중지가 발생할 수도 있고 없을 수도 있습니다. 어떤 이유로 든 텍스쳐에 접근 할 수 없다면, 분명히 오프라인으로 압축 할 수는 없습니다. – eodabash

+0

마지막으로 추가 할 부분은 압축 된 텍스처를 앱에 가져 오는 가장 쉬운 방법은 압축 된 DXT 이미지 데이터를 포함 할 수있는 DDS 파일을 사용하는 것입니다. Paint.NET과 같은 많은 이미지 편집 응용 프로그램에서 DDS 파일을 내보낼 수 있습니다. 런타임에는 파일을로드하고 압축 된 데이터를 glCompressedTexImage2D로 바로 전달합니다. – eodabash