Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ 构建不在OSX 10.9中工作的OpenGL应用程序_C++_Macos_Opengl - Fatal编程技术网

C++ 构建不在OSX 10.9中工作的OpenGL应用程序

C++ 构建不在OSX 10.9中工作的OpenGL应用程序,c++,macos,opengl,C++,Macos,Opengl,使用OSX 10.9/XCode6在我的Macbook Pro上构建任何C++/OpenGL应用程序都会生成一个空白窗口,而不会渲染任何内容。glClear可以工作,我可以看到清晰的颜色,但绘图命令似乎只是被忽略了(没有GL错误,我在通过调试器时没有注意到任何可疑的东西)。当我附加OpenGL profiler时,它是空白的。 GPU和显示驱动程序都很好(steam游戏/预构建的二进制文件工作得很好),据我所知,我的构建环境也很正常(我正在使用MacPorts作为第三方LIB) 什么可能导致这个

使用OSX 10.9/XCode6在我的Macbook Pro上构建任何C++/OpenGL应用程序都会生成一个空白窗口,而不会渲染任何内容。glClear可以工作,我可以看到清晰的颜色,但绘图命令似乎只是被忽略了(没有GL错误,我在通过调试器时没有注意到任何可疑的东西)。当我附加OpenGL profiler时,它是空白的。 GPU和显示驱动程序都很好(steam游戏/预构建的二进制文件工作得很好),据我所知,我的构建环境也很正常(我正在使用MacPorts作为第三方LIB)

什么可能导致这个问题

更多详情: 我正在开发一款多平台的独立游戏,现在尝试将游戏移植到OSX。我们的游戏使用SDL2进行OpenGL上下文管理。 我浪费了2天的调试时间,没有发现代码有任何错误,也没有任何迹象表明为什么根本没有进行渲染。Linux中使用了相同的构建文件和库,游戏在那里运行得非常好。 这个问题与我的显示硬件或驱动程序无关,因为使用OpenGL的预构建二进制文件可以完美地工作

我在XCode和NetBeans上编写了两个简单的OpenGL Hello World应用程序(),其中包含不同的窗口/上下文库(SDL2、SFML和GLFW)(以确保XCode没有问题),我得到了完全相同的结果。只是一个空白屏幕。 这真的让我很困惑,到目前为止,我一直在想如何修复它

根据我掌握的信息,唯一可能的嫌疑犯是我用“-framework OpenGL”参数链接到的OpenGL库。但据我所知,这些都是预构建的,并且已经准备好使用XCode,所以我做一些愚蠢的事情并破坏它们的可能性很小

编辑:


添加一些更积极的错误检查给了我新的线索。glewInit()调用抛出一个无效的枚举错误,但似乎这是预期的行为,应该忽略[]。

我设法得到了一个简单的三角形来显示

不知道我第一次怎么会错过它,但是
glEnableVertexAttribArray()
失败并导致一个无效的操作GL错误,似乎在OSX OpenGL 3.2+Core上
glEnableVertexAttribArray()
失败,如果调用时没有绑定顶点数组对象(在特定的示例代码中就是这种情况)。我不确定为什么我认为顶点属性数组在功能上与顶点数组对象无关

无论如何,由于我设法从OpenGL中得到一些渲染,这意味着我的系统/环境没有任何问题,因此我会考虑我的主要问题得到解决。


谢谢

请在问题中包含示例代码。确保你有一个当前的上下文;我不知道
sf::Window
构造函数是否会使创建的上下文成为当前上下文。您是否尝试过构建苹果的一个示例应用程序?您可以通过XCode的内置帮助找到它们。我还没有尝试过示例应用程序,但这是一个很好的起点。Mac OS上的OpenGL 3.x仅支持核心配置文件。在核心配置文件中,在没有VAO绑定的情况下调用
glEnableVertexAttribArray()
是一个错误。顶点数组状态在VAOs中被跟踪,这正是它们的用途。显然如此。但这对我来说没什么意义。我的印象是,VAO只不过是一个实用工具,可以作为一个组而不是单独跟踪顶点数组状态,因此它应该是可选的<另一方面,代码>glEnableVertexAttribArray()是渲染所必需的,这实际上使VAOs在OSX 3.x核心配置文件中成为必需的。是的,VAOs在OpenGL核心配置文件中是必需的。从规范中删除的功能列表中:“默认顶点数组对象(名称零)也不推荐使用。”顶点数组修改可以在兼容模式下对“默认”VAO 0进行。在核心模式下,该VAO不存在。如果你习惯了VAOs和核心配置文件,那么修改未绑定对象的状态就没有多大意义了。啊哈,我当时误解了VAOs的用途。我不仅移植到OSX,我还将渲染器从OpenGL 2.0升级到3.X core,但仍然会遇到两者之间的不兼容。谢谢你的澄清