我发现仍然有相当多的驱动程序不支持 NPOT 纹理,所以我正在尝试使用 Texture2D 支持来改造我的 2D 引擎(基于 OpenTK,而后者又基于 OpenGL)依赖 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 成为我的真实纹理位图的副本之后,在右侧和底部有额外的空间。