我一直在做一个小型的爱好项目超过一年。它用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中的上下文,都生成相同的“没有OpenGL上下文 即使在调用SDL_GL_MakeCurrent,但是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快递到VS2012快递。但我确实记得它为VS2012 express的x86成功编译。
编辑:有没有人经历过这样的事情?我正在做一些测试,如果我发现有什么会发布下面的发现。