我发现仍然有相当多的驱动程序不支持 NPOT 纹理,因此我正在尝试改进我的 2D 引擎(基于 OpenTK,而 OpenTK 又基于 OpenGL),改为支持 Texture2D依赖GL_ARB_texture_rectangle。作为其中的一部分,我强制所有 NPOTS 纹理位图分配额外的空间,直到下一个 2 的幂大小,这样它们就不会在这些驱动程序上引起错误。我的问题是,我真的必须调整真实位图和纹理的大小并分配所有额外的内存,还是有办法告诉 OpenGL 我想要一个 2 的幂大小的纹理,但我只会使用它的一部分在左上角?
现在我的电话看起来像这样:
GL.TexImage2D(texTarget, 0, PixelInternalFormat.Rgba8, bmpUse.Width, bmpUse.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, bits.Scan0);
这是在我将 bmpUse 制作为我的真实纹理位图的副本之后,在右侧和底部有额外的空间。
Use glTexImage2D
用空数据来初始化纹理和glTexSubImage2D
用数据填充其中的一部分。从技术上讲,OpenGL 允许将数据参数赋予glTexImage{1,2,3}D
为空指针,表示该纹理对象刚刚被初始化。这取决于语言绑定,目标语言是否仍然支持该功能 - 只需测试传递空指针时会发生什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)