私はOpenGLアプリケーションを開発しており、Linux(x86_32とx86_64の両方)ですべてが正常に動作しますが、アプリをWindowsに移植する際に壁にぶつかりました。私のアプリケーションは、非常に基本的なOpenGL 1.0、すばらしいglfw2.7.6およびlibpng1.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 RadeonHD5650を搭載したToshibaL650-1NUノートブックがあります。このノートブックには、ドライバーは提供されていませんが、ベンダーが配布したものは廃止されています。与えられた投稿の作者は使用を提案していますが、私はOpenGL 1.0を使用しているので、このメソッドにアクセスできません。 glBindBuffer
新しいOpenGLを使用せずにこの問題を回避する方法について何かアイデアはありますか?それでも、これが1つのソリューションである場合、 glfwでOpenGL 2.1を使用する方法に関するチュートリアルまたはコードスニペットを提供できますか?
これがエラーの原因となっている私のコードの一部です:
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);