GLM是否与GLad和GCC兼容

时间:2013-06-23 10:13:29

标签: c++ glm-math glload

我目前正在设置我的OpenGL'框架',并且已经决定使用GLload,主要用于扩展加载,但它还具有证明正确'gl'名称空间的额外好处。因此,al gl *函数用作gl :: *例如:

glUniformMatrix4fv(...) // instead of this
gl::UniformMatrix4fv(...) // use this

我也想使用glm,根据我的理解,它应该像include glm/glm.hpp一样简单,并确保告诉我的编译器在哪里找到它。但似乎它可能与glload没有直接兼容,因为当我尝试使用它时会出现以下错误。

In file included from glm/glm/fwd.hpp:32:0,
                 from glm/glm/glm.hpp:91,
                 from src/main.cpp:3:
glm/glm/core/type_int.hpp:220:2: error: redefinition of ‘struct glm::detail::is_int<long int>’
glm/glm/core/type_int.hpp:219:2: error: previous definition of ‘struct glm::detail::is_int<long int>’
glm/glm/core/type_int.hpp:250:2: error: redefinition of ‘struct glm::detail::is_uint<long unsigned int>’
glm/glm/core/type_int.hpp:249:2: error: previous definition of ‘struct glm::detail::is_uint<long unsigned int>’

type_int.hpp看,您可以看到它使用宏,首先分别使用'signed long'和'unsigned long',然后使用'highp_int_t'和'highp_uint_t'(导致此错误)。这两个重新定义的类型是'int64'和'uint64',其确切类型依赖于编译器。当我使用GCC时,我相信这意味着我应该将这些类型视为“签长长”和“长签”。

如果我对这两行进行注释,那么似乎的所有内容都可以正常编译。当然,我相信迟早会发生这样的事情。

查找类似的问题让我this回答,基本上说glm不支持使用-std=C++11构建,这对我来说是不可接受的;但是这个答案已经有将近两年了,glm的网站确实声称完全兼容C ++ 11。

作为参考,我使用的是gcc版本4.7.3,glm版本0.9.5(从github repo中提取),glload从版本0.4.4的glsdk(我已经删除了所有其他'模块'glsdk,留给我justglload)。

1 个答案:

答案 0 :(得分:1)

好吧,使用GLM版本0.9.5似乎存在问题。

谢天谢地,我使用了一个git子模块,所以我能够使用0.9.4版本进行测试。似乎版本0.9.4对我来说效果很好。