首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在没有额外分配的情况下将NPOT图像glTexImage2d到Pow-2纹理上吗?

可以在没有额外分配的情况下将NPOT图像glTexImage2d到Pow-2纹理上吗?
EN

Stack Overflow用户
提问于 2011-02-22 11:09:47
回答 2查看 1.2K关注 0票数 0

我发现仍然有相当数量的驱动程序不支持NPOT纹理,所以我正在尝试将我的2D引擎(基于OpenTK,而它又基于OpenGL)重新调整为支持Texture2D,而不是依赖GL_ARB_texture_rectangle。作为其中的一部分,我强制所有NPOTS纹理位图分配额外的空间,直到下一个2的幂大小,这样它们就不会在这些驱动程序上导致错误。我的问题是,我真的需要调整真实的位图和纹理的大小并分配所有额外的内存吗?或者有没有办法告诉OpenGL我想要一个2的幂大小的纹理,但我只打算在左上角使用它的一部分?

现在我的电话看起来是这样的:

代码语言:javascript
复制
GL.TexImage2D(texTarget, 0, PixelInternalFormat.Rgba8, bmpUse.Width, bmpUse.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, bits.Scan0);

这是在我将bmpUse制作成真实纹理位图的副本之后,在右边和底部留出额外的空间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-22 16:25:37

使用包含空数据的glTexImage2D初始化纹理,使用glTexSubImage2D使用数据填充纹理的一部分。从技术上讲,OpenGL允许提供给glTexImage{1,2,3}D的数据参数是空指针,这表明纹理对象只是要初始化。这取决于语言绑定,如果该特性在目标语言中仍然受支持--只要测试一下如果你传递一个空指针会发生什么。

票数 6
EN

Stack Overflow用户

发布于 2011-02-22 16:32:26

datenwolf在如何仅使用部分图像初始化纹理方面是正确的,但有两个问题需要注意:

  • 需要重新映射网格的纹理坐标,因为现在完整纹理的0-1纹理范围也包含未初始化的数据,而不是完整纹理。有用的范围现在是[0-orig_width/padded_width]
  • wrapping你的纹理将只包装整个纹理,而不是你的子部分。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5073611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档