当分辨率不兼容时,如何捕获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错误。如果给出错误,我可以显示"不要使用此图像,请使用另一个图像"。并返回0。

如何完成这项任务?我还考虑过仅在某些决议中限制用户,但这不是解决方案。对吗?

在您的情况下未接受的那些图像格式不是4的倍数。设置所有GL_UNPACK_…参数以匹配您的图像数据访问glteximage之前。GL_UNPACK_ALIGNMENT对您的问题特别感兴趣。

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

这看起来像一些奇数驱动程序错误。无论您通过什么,OpenGL呼叫都不会崩溃(只要它不是指针操作的无效指针或错误的尺寸)。另外,我看不到纹理未能加载的任何模式。

通常,关于有效纹理只有三个限制功能:纵横比和维度:

  • 纹理可能太高或太宽而无法处理。
  • 旧卡可能需要纹理为正方形(宽度=高度)。
  • 较旧的卡可能需要纹理维度为两个功率(宽度= 2 n ; height = 2 m )。

我看不到您的纹理维度上的任何真实模式。

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

最新更新