iPad OpenGL ES:关于内存纹理大小
我正在加载一个 1024 x 1024 的 RGBA 纹理。我预计内存纹理大小将为 1024 x 1024 x 4 => 4MB。但当我尝试打印内存消耗时,我可以看到纹理占用了大约 7 - 8 MB,几乎是两倍。我只是想知道 iPad 是否将每个通道从字节转换为半浮点, 那么有没有办法指定每个像素应该占用 4 个字节而不是 8 个字节。
I am loading a RGBA texture which is 1024 x 1024. I expected the on-memory texture size would be 1024 x 1024 x 4 => 4 MB . But when I try to print the memory consumption I can see that the texture is taking around 7 - 8 MB, almost double. I was just wondering whether IPad is converting every channel from byte to half-float,
So is there any way to specify that every pixel should take 4 bytes and not 8 bytes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
指定它的最简单方法是使用指定大小的内部格式(例如 GL_RGBA8 而不是 GL_RGBA),尽管我不确定 ES 是否支持这些格式。但如果 ES 设备能够存储每个通道超过 8 位的标准 RGBA 纹理,我会感到惊讶。
如何确定 GPU 内存消耗?我宁愿猜测额外的内存是由于其他重要的 GPU 资源(例如 VBO)造成的,并且不要忘记帧缓冲区本身(渲染到的内存),它需要合理的内存量。请记住,使用 mip 贴图时,它们还需要大约 33% 的基础纹理内存。
如果您谈论的是用于创建纹理的 CPU 数据的大小,那么这与纹理的大小无论如何都没有任何关系,而仅取决于您自己的数据的大小。
The easiest way to specify it is using a sized internal format (like GL_RGBA8 instead of GL_RGBA), although I'm not sure if these are supported in ES. But I would be surprised if an ES device would store a standard RGBA texture with more than 8 bits per channel.
How do you determine the GPU memory consumption? I would rather guess the additional memory is due to other important GPU resources, like VBOs and not to forget the framebuffer itself (the memory you render into), that takes a reasonable amount of memory. And remember, when using mip-maps these additionally require around 33% of the base texture's memory.
And if you're talking about the size of the CPU data you create the texture from, then this doesn't have anything to do with the texture's size anyway and only depends on the size of your own data.
使用 glTexImage2D 创建纹理时,必须指定纹理的类型和内部格式。
你的可能设置为 GL_FLOAT 或其他东西。
在此处查找文档: http://www.opengl.org/sdk/文档/man/xhtml/glTexImage2D.xml
You have to specify the type and internal format of your texture when you create it using glTexImage2D.
Yours is probably set to GL_FLOAT or something .
Lookup the documentation here : http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml