2011-01-27 4 views
2

1024x1024 인 RGBA 텍스처를로드 중입니다. 메모리 내장 텍스처 크기가 1024 x 1024 x 4 => 4MB가 될 것으로 예상했습니다. 그러나 메모리 소비를 인쇄하려고하면 텍스처가 약 7 - 8MB로 거의 두 배가 걸리는 것을 볼 수 있습니다. IPad가 모든 채널을 바이트에서 반 부동으로 변환하는지 궁금한데 그래서 모든 픽셀이 8 바이트가 아닌 4 바이트를 차지하도록 지정하는 방법이 있습니다.iPad OpenGL ES : 메모리 질감 크기

+0

실수로 2048x1024 텍스처를로드 (또는 패딩)하지 않습니까? – bobobobo

답변

-1

당신은 유형내부 형식이 glTexImage2D를 사용하여 만들려면 질감의을 지정해야합니다.

너의 것은 아마도 GL_FLOAT 또는 무엇인가로 설정되어있을 것이다.

조회 여기 문서 : 나는 이러한 ES에서 지원하는 경우 확실하지 않다하지만 http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml

+0

glTexImage2D의 type 인수는 텍스처 데이터를 생성 할 CPU 배열의 유형을 지정합니다. 내부 형식에만 의존하는 GPU의 데이터에는 영향을 미치지 않습니다. –

+0

그럼에도 GL_FLOAT는 적어도 16MB의 결과를 가져옵니다. –

0

가장 쉬운 방법은, 그것은 (대신 GL_RGBA의 GL_RGBA8 같이) 크기의 내부 형식을 사용하고 지정합니다. 하지만 ES 장치가 채널 당 8 비트 이상을 표준 RGBA 텍스처로 저장하면 놀랍습니다.

어떻게 GPU 메모리 사용량을 결정합니까? VBO 같은 다른 중요한 GPU 리소스 때문에 추가 메모리가 필요하다고 추측하고 프레임 버퍼 자체 (렌더링하는 메모리)를 잊지 말고 합리적인 양의 메모리를 사용합니다. 그리고 밉맵을 사용하면 기본 텍스처의 메모리 중 약 33 %가 추가적으로 필요하다는 것을 기억하십시오.

당신이 텍스쳐를 생성하는 CPU 데이터의 크기에 대해 이야기하고 있다면, 이것은 어쨌든 텍스쳐의 크기와 관련이 없으며 자신의 데이터의 크기에만 의존합니다.

+0

@downvoter downvote 이유는 무엇입니까? 좋아, 나는 ES 장치의 하드웨어 아키텍처에 맞지 않을 수도 있지만, 특히 잘못된 점이 무엇인지 알고 싶습니다. 아니면 내가 그 질문을 잘못 이해 했는가? –