我目前正在设置我的OpenGL‘框架’,并且已经决定使用GLload,主要用于扩展加载,但是它还有一个额外的好处,就是证明了一个正确的“gl”名称空间。因此,al gl*函数被用作gl::*,例如:
glUniformMatrix4fv(...) // instead of this
gl::UniformMatrix4fv(...) // use this我还想使用glm,据我理解,glm应该像包含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,您可以看到它使用宏,首先使用“已签名的长”和“无符号的长”,然后使用“highp_int_t”和“highp_uint_t”(导致此错误)。这两种重新定义类型是“int64”和“uint64 64”,它们的确切类型依赖于编译器。当我使用GCC的时候,我相信这意味着我应该把这些类型看作是‘长的’和‘长的’。
如果我真的把这两行评论掉了,一切似乎都编译得很好。当然,我相信迟早会发现我这样做打破了一些东西。
查找类似的问题,我找到了这的答案,基本上说glm不支持用-std=C++11构建,这对我来说是不可接受的;但是这个答案已经有将近两年的历史了,glm的网站确实宣称完全兼容C++11。
作为参考,我使用的是gcc版本4.7.3,glm版本0.9.5 (从github回购中提取),glload来自glsdk版本0.4.4 (我已经删除了glsdk的所有其他“模块”,留给我的只是glload)。
发布于 2013-06-23 11:57:29
好的,使用GLM的0.9.5版本似乎是个问题。
谢天谢地,我使用了一个git子模块,所以我能够用0.9.4版本进行方便的测试。看来0.9.4版对我来说还不错。
https://stackoverflow.com/questions/17259711
复制相似问题