Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opengl输出错误,SDL2 x86_C++_Opengl_Sdl - Fatal编程技术网

C++ Opengl输出错误,SDL2 x86

C++ Opengl输出错误,SDL2 x86,c++,opengl,sdl,C++,Opengl,Sdl,我从事一个小爱好项目已经一年多了。用C++编写,使用SDL/图像/混合器和MIZIIP。它使用OpenGL进行渲染 直到今年7月,我一直在维护和测试x64和x86版本的代码。两者都是在没有对原始代码进行任何更改的情况下编译的,并且运行完全相同 然而,大约在8月份,我将代码从1.2.15升级到SDL2.0,并且只开始维护和测试x64版本。现在,当我尝试构建x86版本时,我遇到了以下问题 Correct Output - 我尝试过的事情: gDebugger:两个版本的代码都创建相同类型的上下文。

我从事一个小爱好项目已经一年多了。用C++编写,使用SDL/图像/混合器和MIZIIP。它使用OpenGL进行渲染

直到今年7月,我一直在维护和测试x64和x86版本的代码。两者都是在没有对原始代码进行任何更改的情况下编译的,并且运行完全相同

然而,大约在8月份,我将代码从1.2.15升级到SDL2.0,并且只开始维护和测试x64版本。现在,当我尝试构建x86版本时,我遇到了以下问题

Correct Output
- 我尝试过的事情:

gDebugger:两个版本的代码都创建相同类型的上下文。 然而,累积缓冲区是64位的。找不到办法 禁用它

通过drmemory运行:没有令人担忧的内存或堆损坏

创建时检查上下文:两个版本创建相同的值 在SDL中,两者生成相同的OpenGL上下文 即使在调用SDL_GL_MakeCurrent后仍为当前,但x64 版本可以工作,x86调试版本会显示一个黑屏,而 x86发行版提供了上述输出

x64和x86版本都是相同的代码,在SDL2.0之前用于编译和正常工作。我不确定这是SDL中的错误,还是我做错了什么。如果你需要更多的信息,请告诉我

更新:

我只使用纯GL 1.1代码,因此没有着色器或vbo。仅使用glVertexPointer以及关联的GLCOLORPOINT和glTexCoordPointer函数。所有数组都定义为GL_类型,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。但我确实记得它为x86 for VS2012 express成功编译


编辑:以前有过类似的经历吗?同时,我正在做一些测试,如果我发现了什么,我将在下面发布结果。

更多信息肯定会有帮助,特别是您是否使用VBOs或客户端内存,如何设置顶点指针和任何相关的顶点着色器。x86和x86-64版本之间的最大变化是指针类型的大小,错误写入的顶点数组指针可能会产生我现在只能想象的不正确的纹理坐标问题。更新了问题的更多信息。如果您需要更多关于向后兼容上下文的信息,请告诉我。核心和前向/后向兼容之间的区别仅在OpenGL3.x中引入,并且只有在OpenGL3.2中引入的语言才能真正解决。如果您在实现3.2或更高版本的驱动程序上请求2.1或更高版本的上下文,它可能会将版本字符串报告为类似于X.Y向后兼容的内容,其中X.Y大于您请求的版本;这是正常的。是的,我知道向后兼容上下文部分的方式。累积缓冲区呢?它表示64位,即使对于x86应用程序也是如此。累积缓冲区实际上与CPU字大小无关,它是帧缓冲区的一部分,可以累积颜色。就像你可能有一个16/24/32位的深度缓冲区一样,你甚至可以有128位的累积缓冲区,尽管在现代桌面硬件中并不常见——SGI在当时有一些真正奇特的硬件。事实上,如果我记得的话,在Windows中有几种仅GDI的格式可以提供128位的累加。
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);