我正在开发一个 OpenGL 应用程序,并且在Linux(x86_32 和 x86_64)下一切正常,但是我在将应用程序移植到Windows时遇到了困难。我的应用程序使用非常基本的OpenGL 1.0、出色的glfw 2.7.6和libpng 1.5.7。在移植整个程序之前,我尝试编写最简单的代码来测试这些库在 Windows 下是否正常工作,并且在我开始使用纹理之前一切似乎都正常工作!
在我的程序中使用纹理glTexImage2D(..)
会导致访问冲突并出现以下错误:
First-chance exception at 0x69E8F858 (atioglxx.dll) in sidescroll.exe: 0xC0000005: Access violation reading location 0x007C1000.
Unhandled exception at 0x69E8F858 (atioglxx.dll) in sidescroll.exe: 0xC0000005: Access violation reading location 0x007C1000.
我做了一些研究,发现这可能是 GPU 驱动程序错误。可悲的是,我有一台带有AMD Radeon HD5650的Toshiba L650-1NU笔记本电脑,没有提供驱动程序,但供应商分发过时。给定帖子的作者建议使用,但由于我使用OpenGL 1.0,因此我无权使用此方法。 glBindBuffer
您对如何在不使用更新的 OpenGL 的情况下绕过此问题有任何想法吗?不过,如果这是唯一的解决方案,是否可以向我提供有关如何将OpenGL 2.1与glfw一起使用的教程或代码片段?
这是我的一段代码,它导致了错误:
img = img_loadPNG(BACKGROUND);
if (img) {
printf("%p %d %d %d %d", img->p_ubaData, img->uiWidth, img->uiHeight, img->usiBpp, img->iGlFormat);
glGenTextures(1, &textures[0]);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->uiWidth, img->uiHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, img->p_ubaData); //SEGFAULT HERE ON WINDOWS!
//img_free(img); //it may cause errors on windows
} else printf("Error: loading texture '%s' failed!\n", BACKGROUND);