可以将NPT图像glTexImage2d转换为Pow-2纹理而无需额外分配?

Blu*_*kMN 0 opengl texture2d

我发现还有相当数量的驱动程序不支持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);
Run Code Online (Sandbox Code Playgroud)

这是在我使bmpUse成为我的真实纹理位图的副本后,在右侧和底部有额外的空间.

dat*_*olf 5

使用glTexImage2D空数据初始化纹理并glTexSubImage2D用数据填充其中的一部分.从技术上讲,OpenGL允许给定的数据参数glTexImage{1,2,3}D为空指针,表示纹理对象只是初始化.它取决于语言绑定,如果目标语言仍然支持该功能 - 只需测试传递空指针时会发生什么.