gpt4 book ai didi

c++ - OpenGL 无效的纹理或状态

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:09 24 4
gpt4 key购买 nike

我们正在 OpenGL 应用程序中开发 C++ 插件。应用程序将根据需要在我们的插件上调用“渲染”方法。在渲染我们的纹理时,我们注意到有时 一些 纹理被绘制成完全白色,即使它们是使用有效数据创建的。关于哪种纹理和何时出现似乎是随机的。在调查可能导致某些纹理呈现白色的原因时,我注意到仅仅尝试检索纹理的大小(即使是正确渲染的纹理)是行不通的。下面是创建纹理并检索其大小的简单代码:

GLuint textureId;
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageWidth, imageHeight, 0,
GL_BGRA, GL_UNSIGNED_BYTE, imageDdata);

// try to lookup the size of the texture
int textureWidth = 0, textureHeight = 0;
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &textureWidth);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &textureHeight);

glBindTexture(GL_TEXTURE_2D, 0);

输入到 glTexImage2D 的图像宽度和高度是 1536 x 1536,但是从 glGetTexLevelParameter 返回的值是 16384 x 256。事实上,我传递给 glTexImage2D 的任何宽度和高度图像都会产生 16384 x 256 的输出。如果我传了个64 x 64的宽高,还是传回来16384 x 256。

我在另一个独立的测试应用程序中使用相同的简单纹理加载/渲染代码,并且它始终正常工作。然而,当我在这个更大的应用程序中使用代码时,我得到了这些白色纹理。我还验证了 glGetError() 返回 0。

我假设包含应用程序正在设置一些 OpenGL 状态,当我们尝试渲染我们的纹理时会导致问题。对于可能导致这些白色纹理或无效纹理尺寸的检查事项,您有什么建议吗?

更新
我正确呈现的测试应用程序和未正确呈现的集成应用程序都在启用了加速 3D 图形的 Windows 7 上的 VM 中运行。这是虚拟机环境:
中央操作系统 7.0
OpenGL 2.1 台面 9.2.5

最佳答案

调用此代码时,您是否检查过是否有有效的 OpenGL 上下文处于事件状态? 您返回的值可能是留在变量中的未初始化垃圾,如果 glGetTexLevelParameter 由于某种原因失败,这些值不会被修改。 请注意 glGetErrors 如果没有 OpenGL 上下文处于事件状态,可能会返回 GL_NO_ERROR

要检查是否有 OpenGL 上下文,请使用 wglGetCurrentContext (Windows)、glXGetCurrentContext (X11/GLX) 或 CGLGetCurrentContext (MacOS X CGL)查询事件的 OpenGL 上下文;如果没有任何事件,所有这些函数都将返回 NULL。


仅供引用:您应该使用 GLint 从 OpenGL 中检索整数值,原因是 OpenGL 类型具有非常特定的大小,这可能与同名的原始 C 类型不同。例如,C unsigned int 的大小可能在 16 到 64 位之间变化,而 OpenGL GLuint 始终固定为 32 位。

关于c++ - OpenGL 无效的纹理或状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com