一年多来,我一直在从事一个小型的业余爱好项目。它是用 C++ 编写的,使用 SDL/Image/Mixer 和 Minizip。它使用 OpenGL 进行渲染。
直到今年 7 月,我一直在维护和测试 x64 和 x86 版本的代码。两者都在没有对原始代码进行任何更改的情况下编译并且运行完全相同。
然而,在 8 月左右,我将代码从 1.2.15 移至 SDL 2.0,并开始仅维护和测试 x64 版本。现在,当我尝试构建 x86 版本时,我遇到了以下问题。
Correct Output
Incorrect Output
- 我尝试过的事情:
gDebugger:两个版本的代码创建相同类型的上下文。但是,两者的累积缓冲区都是 64 位。找不到禁用它的方法。
通过 drmemory 运行它:没有惊人的内存或堆损坏
检查创建上下文:两个版本都在 SDL 中创建相同的值上下文,即使在调用 SDL_GL_MakeCurrent 之后,都生成相同的“没有使 OpenGL 上下文成为当前”,但是 x64 版本可以工作,x86 调试版本会出现黑屏,并且
x86 发行版给出了上述输出。
x64 和 x86 版本是完全相同的代码,用于在 SDL 2.0 之前编译和正常工作。我不确定它是 SDL 中的错误,还是我做错了什么。如果您需要有关此的更多信息,请告诉我。
更新:
我只使用纯 GL 1.1 代码,所以没有着色器或 vbo。仅使用 glVertexPointer 以及相关的 glColorPointer 和 glTexCoordPointer 函数。所有数组都定义为 GL_types,gl 函数给出了指向客户端内存的指针。所有纹理都渲染为四边形。
GLfloat vertex_array_3f[12]; //Initialize array glVertexPointer(3, GL_FLOAT, 0, vertex_array_3f); //set color and tex pointers glDrawArrays(GL_QUADS, 0, 4);
我请求的上下文类型是 2.1,但我得到了一个向后兼容的上下文。在 x64 版本中不会导致任何问题。
同期我也把VS2010 express换成了VS2012 express。但我确实记得它为 VS2012 express 为 x86 成功编译。
编辑:有没有人经历过这样的事情?同时我正在做一些测试,如果我发现任何东西会在下面发布结果。