Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
SDL2、MacOSX和OpenGL:如何避免同时包含gl.h和gl3.h?_Macos_Opengl_Sdl_Sdl 2 - Fatal编程技术网

SDL2、MacOSX和OpenGL:如何避免同时包含gl.h和gl3.h?

SDL2、MacOSX和OpenGL:如何避免同时包含gl.h和gl3.h?,macos,opengl,sdl,sdl-2,Macos,Opengl,Sdl,Sdl 2,我正在使用OpenGL 3.2核心配置文件开发一个SDL2应用程序。编译时,我得到以下警告: /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:5:2:警告: #警告gl.h和gl3.h均包括在内。如果使用已删除的OpenGL功能,编译器将不会调用错误。[-Wcpp] 我必须假设SDL在某处包含gl.h,因为我的唯一包含如下: #define GL3_PROTOTYPES #include <OpenGL/gl3.h>

我正在使用OpenGL 3.2核心配置文件开发一个SDL2应用程序。编译时,我得到以下警告:

/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:5:2:警告: #警告gl.h和gl3.h均包括在内。如果使用已删除的OpenGL功能,编译器将不会调用错误。[-Wcpp]

我必须假设SDL在某处包含gl.h,因为我的唯一包含如下:

#define GL3_PROTOTYPES

#include <OpenGL/gl3.h>
#include <SDL2/SDL.h>
#定义GL3#U原型
#包括
#包括

虽然我可以忽略这一点,但当我意外地使用了核心配置文件中不可用的枚举值时,它已经导致了一个难以发现的错误。有什么方法可以阻止gl.h被包含吗?

看看
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h
,你应该会在第一行看到一个非常标准的include-guard:
\ifndef\uu gl\uh
。如果您查看
gl3.h
,您将注意到
\uu gl3\u h
有一个同样标准的include-guard。仅当两者都已定义且
GL\u DO\u NOT\u未定义时才会触发此警告

防止在
gl.h
中包含任何内容的最简单方法是在包含之前定义它。为了避免把你的实际代码弄乱,像:

苹果公司__ #定义_ #如果包含多个GL版本标题,则定义GL不警告 #恩迪夫
我建议将
-D_ugl_h_u-DGL_DO_NOT_WARN_如果包含多个版本头
作为编译器开关添加到目标OS X时的Makefile中(这样无论
gl.h
间接包含在哪里,它都不会做任何事情)。这确实不是解决这个问题的正确方法,生成警告是有原因的(您在问题中指出了这一点——当包含两个头时,不推荐使用的OpenGL标记将不会生成编译器警告/错误)

我认为SDL2本身应该有一些预处理器机制来完成我在上面用
\ifdef\uuuu APPLE\uuuu
所做的工作,但取而代之的是,这将完成工作。无论以何种方式将两者都包括在内都不是一个错误,OS X只是提供了一种方便的机制,当不推荐的令牌(例如,
GL\u MODELVIEW
)在一个应该是core 3+的项目中使用时,生成编译器错误


在其他平台上,无论您使用的是核心OpenGL 3+在编译时都不是黑白的,因此编译器不能用于此目的。这是苹果所做的事情之一,因为他们能够做到;“换个角度思考。”

此警告在SDL2的2.0.4候选版本中消失。 SDL邮件列表上共享了发布候选版本的临时链接。

回答得很好。定义
\uu gl\u h\uu
似乎会在SDL内部引起一些问题,但这是一个单独的问题。我会看看我能直接从他们的社区找到什么。