2017-05-04 22 views
0

우리는 프로그램에서 메모리 사용을 최적화하려고 노력 중입니다. 우리는 텍스처 중 일부는 RGB 값으로 모두 저장 될 때 알파 값을 갖는 그레이 스케일로 저장 될 수 있다는 것을 알았습니다.openGLES 2 - 32 비트 RGBA로 확장하지 않고 8 비트 회색조 및 8 비트 알파 텍스처를로드하려면 어떻게합니까?

그레이 스케일 및 알파 (둘 다 8 비트) 채널을 2 개만 저장하면 디스크 공간과 메모리를 절약 할 수 있습니다. 따라서 32 비트 RGBA보다 디스크와 메모리 모두에서 50 % 절약 할 수 있습니다.

그러나 우리가 겪은 장애물은이 정보를 OpenGL에 제공하는 방법을 찾지 못한다는 것입니다. 우리는 디스크에 이미지를 두 개의 8 비트 채널이있는 하나의 이미지로 또는 두 개의 이미지로 각각 한 개의 8 비트 채널로 저장할 수 있습니다. OpenGL이 이것을 회색 음영 이미지로 볼 수있는 방법을 찾을 수 없기 때문에 Red와 Green 같은 특정 색상으로 보지 않고 메모리에이 두 채널 만 있습니다. GL_RG8이 올바른 번호를 가진 것으로 밝혀졌습니다. 오른쪽 비트 수는 있지만 잘못된 색상은 채널 수입니다.

OpenGLES 2에서도이 기능을 사용할 수 있습니까? 우리는 OpenGL에 2 개의 채널을주고 그들이 Red와 Green이 아니라 Gray와 Alpha라고 말할 수 있습니까?

나는이 질문을 보았습니다 : Can I use a grayscale image with the OpenGL glTexImage2D function?하지만 그것은 다소 오래되었고 GL_LUMINANCE는 이제 무시되었습니다.

답변

0

GL_RG8은 OpenGL ES 3.x 이상에만 존재합니다. OpenGL ES 2.x의 일부가 아닙니다. ES 2.x의 경우 GL_LUMINANCE_ALPHA을 사용할 수 있습니다. 사용 중지되었지만 삭제되지는 않았으므로 여전히 정상적으로 작동해야합니다.

당신이 정말로 GL_RG8를 사용하려는 경우, 당신은 당신이 그들을 사용하거나 glTexParameteri()를 사용 TEXTURE_SWIZZLE_[R|G|B|A]을 설정하여 샘플러에 스위 즐링 (swizzle) 할 수있을 때 채널의 순서를 변경하는 셰이더 코드 스위 즐을 사용하여 하나 "잘못된 색상"을 수정할 수 있습니다.