在iSGL3d中实现非2次幂纹理

时间:2012-08-07 17:17:14

标签: objective-c ios opengl-es isgl3d

我写了一个很大程度上依赖iSGL3d进行3D渲染的应用程序,现在我已经到了一个需要开始摆弄纹理大小的内存分配原因。

我的应用使用非常大的纹理(1024x1024),从那个到512x512是不可接受的

因此,使用GL ES 2.0作为基础,我希望将纹理略微减少到接近700x700

我知道这是可能的,因为我在以前的生活中使用非2次幂纹理手写的OpenGL代码

但是我有一段时间试图筛选iSGL3d的代码以找到我可以影响这一变化的地方......而且该项目现在似乎已被抛弃。

基本上,默认情况下,即使您使用GLES 2.0实例,iSGL3d也只会制作一个2位幂的位图并将纹理转储到其中,留下一堆透明像素。这没用。

将纹理大小强制为非二次幂图像会生成GL错误。我假设这是因为我没有在任何需要强制的地方强制执行它,或者iSGL3d没有正确使用GLES 2.0,因为它应该是

任何指针都很有用......

1 个答案:

答案 0 :(得分:1)

  

只需禁用mipmapping,即使有效的纹理也无法绘制

您是否为这些纹理设置了缩小采样以不使用mipmap?它默认为mipmap选项,因此如果不使用mipmap,则必须将其设置为其他选项。

e.g。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);