尝试在大位图上使用 OpenGL 纹理压缩 - 得到白色方块

Posted

技术标签:

【中文标题】尝试在大位图上使用 OpenGL 纹理压缩 - 得到白色方块【英文标题】:Trying to use OpenGL Texture Compression on a large bitmap - get white squares 【发布时间】:2013-03-25 15:21:48 【问题描述】:

我正在尝试对大图像使用 OpenGL 的纹理压缩。我的图像是作为学习练习的一部分,我正在屏幕上绘制的一系列 128x128 瓷砖的世界地图。我希望用户能够平移和缩放图像。这是一个相当大的 JPG(20k x 10k 像素),因此我希望压缩每个图块(我平铺图像)以降低程序的内存占用。

当我调用 glTexImage2D 时,我选择了一种任意纹理压缩格式,我的每个图块都变成了白色方块。我对此进行了更深入的研究,并认为“也许我的视频卡不支持所有这些格式。”显卡是 IBM ThinkPad 笔记本电脑上的 Nvidia NVS 3100M,我做了一个 glGetString 来尝试查看支持的纹理压缩格式是什么,但它没有返回任何内容(GL_COMPRESSED_TEXTURE_FORMATS)。我还检查了支持哪些 GL_EXTENSIONS,它返回了“GL_WIN_swap_hint GL_EXT_bgra GL_EXT_paletted_texture”,看起来并不多。

我的程序是使用 SharpGL 库在 C# 中编写的。

为了弄清楚这一点,我还可以查看哪些其他内容?

【问题讨论】:

您不能将GL_COMPRESSED_TEXTURE_FORMATSglGetString 一起使用。您可以将它与glGetIntegerv 一起使用。另外,你有什么 OpenGL 版本?你的GL_VENDORGL_RENDERER 是什么? 我的 GL_VERSION 是 1.1.0,我的 GL_RENDERER 是“GDI Generic”。奇怪的是,C# SharpGL 库不允许我使用 glGetInteger 函数获取 GL_COMPRESSED_TEXTURE_FORMAT。 API 有一个枚举,它不是选项之一。 您没有获得硬件加速。这是一个更大的问题。您是否安装了正确的驱动程序? Optimus 是否设置为正确切换到 NVIDIA 卡(如果有)?尝试运行OpenGL Extension Viewer,看看你得到了什么版本。 你死定了。我在添加 OpenGL 控件的地方更新了 XAML 代码。我添加了一个名为 RenderContextType="FBO" 的属性。我假设 FBO 代表“帧缓冲区对象”?我认为 SharpGL 对我隐瞒了这一点,这是让我绊倒的程序员。谢谢你的帮助。 可能与原始位图的 Alpha 通道有关。将其保存为带有 alpha 通道的 32 位位图并尝试。 【参考方案1】:

检查那些纹理缩小过滤设置怎么样?

【讨论】:

以上是关于尝试在大位图上使用 OpenGL 纹理压缩 - 得到白色方块的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的 OpenGL - 将位图转换为纹理,并保存纹理

如何在OpenGL中反转纹理颜色

将位图数据加载到 OpenGL 纹理中时出现问题

如何在 C++ 中将位图绘制为 OpenGL 纹理?

Opengl es 2.0 在视频上绘制位图叠加

关于OpenGL纹理 装载位图的问题