2

我试图捕捉来自不兼容的图像纹理分辨率的错误

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata);


1. Compatible resolution, working fine = 1024x1024, 1920x1200, 1920x1080, 704x891
2. Incompatible resolutions, all giving error = 2058x1734, 1018x1280, 591x602, etc.

我不知道为什么 glTexImage2D 在 #1 分辨率下工作正常,而在 #2 分辨率下会出错。我无法提取它遵循的分辨率模式,这意味着某些分辨率工作正常,而另一些则不行。我不知道为什么。

现在的问题是,如果用户尝试创建分辨率不兼容的纹理,那么 OpenGL 应该会捕获错误,如果未创建纹理但 glTexImage2D 没有返回任何内容,我应该得到 0,因此我们无法为用户确定安全的内容。“不支持此分辨率,请勿使用。” 但问题是 OpenGL 没有捕捉到 glTexImage2D 错误。

在运行时执行期间

cout<<until here working fine..<<endl;

glTexImage2D(......) run-time execution stops here and windows gives not responding error.

cout<<"output of something that never executed"<<endl;
Here If I use glGetError() it never works. Because windows gives error in glTexImage2D.

那么,有谁知道我怎么能捕捉到 glTexImage2D 错误。如果它给出错误,那么我会显示“不使用此图像,使用另一个图像”。并返回 0。

如何完成这个任务?我还考虑过仅以某些分辨率限制用户,但这不是解决方案。正确的 ?

4

2 回答 2

4
于 2012-12-22T12:32:34.383 回答
0

这看起来像一些奇怪的驱动程序错误。无论您传递什么,OpenGL 调用都不应崩溃(只要它不是无效指针或指针操作的大小错误)。此外,我在无法加载的纹理上看不到任何图案。

通常应该只有三个关于有效纹理的限制能力:纵横比和尺寸:

  • 纹理可能太高或太宽而无法处理。
  • 较旧的卡片可能要求纹理为方形(宽度 = 高度)。
  • 较旧的卡片可能要求纹理尺寸为 2 的幂(宽度 = 2 n;高度 = 2 m)。

我在您的纹理尺寸中看不到任何真实的图案。

纹理格式(即颜色深度/颜色通道)可能是另一个问题,但不要认为这实际上涉及到这里。

于 2012-12-22T10:31:41.680 回答