4

我目前正在设置我的 OpenGL“框架”,并已决定使用 GLload,主要用于扩展加载,但它具有证明正确的“gl”名称空间的额外好处。因此,所有 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 时,我相信这意味着我应该将这些类型视为 'signed long long' 和 'usigned long long'。

如果我注释掉这两行,一切似乎都编译得很好。当然,我相信迟早会证明我这样做会破坏某些东西。

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

作为参考,我正在使用 gcc 4.7.3 版、glm 0.9.5 版(从 gi​​thub 存储库中提取)、 glsdk 0.4.4 版的 glload(我已经删除了 glsdk 的所有其他“模块”,留下了我只是glload)。

4

1 回答 1

1

好的,使用 0.9.5 版的 GLM 似乎有问题。

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

于 2013-06-23T11:57:29.790 回答