解决方案不兼容时如何捕获glTexImage2D错误?

时间:2012-12-22 10:16:12

标签: opengl textures texture-mapping texture2d glteximage2d

我试图捕捉

中不兼容的图像纹理分辨率引起的错误
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应该捕获错误,如果没有创建纹理我应该得到0但是glTexImage2D没有返回任何东西,所以我们无法为用户创建安全的东西好。 “不支持此解决方案,请勿使用它。”但问题是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错误。如果它出错,那么我显示OK“不要使用此图像,请使用另一个图像。”并返回0。

如何完成这项任务? 我还想过只限制一些分辨率的用户,但这不是解决方案。对吗?

2 个答案:

答案 0 :(得分:4)

在您的情况下不接受的那些图像格式不是4的倍数。这引出了一个问题:您是否设置了像素存储参数?设置所有GL_UNPACK_…参数以匹配您之前调用glTexImage之前的图像数据GL_UNPACK_ALIGNMENT对您的问题特别感兴趣。

http://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml

答案 1 :(得分:0)

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

通常,有效纹理应该只有三种限制功能: 纵横比和尺寸:

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

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

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