我发现仍然有相当数量的驱动程序不支持NPOT纹理,所以我正在尝试将我的2D引擎(基于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制作成真实纹理位图的副本之后,在右边和底部留出额外的空间。
发布于 2011-02-22 16:25:37
使用包含空数据的glTexImage2D初始化纹理,使用glTexSubImage2D使用数据填充纹理的一部分。从技术上讲,OpenGL允许提供给glTexImage{1,2,3}D的数据参数是空指针,这表明纹理对象只是要初始化。这取决于语言绑定,如果该特性在目标语言中仍然受支持--只要测试一下如果你传递一个空指针会发生什么。
发布于 2011-02-22 16:32:26
datenwolf在如何仅使用部分图像初始化纹理方面是正确的,但有两个问题需要注意:
[0-orig_width/padded_width]https://stackoverflow.com/questions/5073611
复制相似问题