首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swig包装GLM库

Swig包装GLM库
EN

Stack Overflow用户
提问于 2012-08-14 17:58:28
回答 2查看 1K关注 0票数 2

我目前正在开发一个2D游戏引擎,在实现LUA脚本/解释器时遇到了困难。

我正在使用SWIG,并且已经获得了所有的基本功能,运行良好。

在引擎中,我使用GLM (OpenGL、数学库、http://glm.g-truc.net/)来处理所有与向量和矩阵相关的区域。

我真的需要将glm (在基本级别上)公开给via SWIG to LUA,这样我就可以在LUA中调用如下方法:

代码语言:javascript
复制
actor:GetPosition()  <- Which returns a glm::vec2

GLM是一个相当复杂的库(可能是轻描淡写的笑),我不需要整个事情公开,这将是荒谬的工作量。我只是希望能够访问glm::vec2类的xy组件。

我相信这一定很简单,因为SWIG不需要完整的类定义,而且肯定有一种方法可以让SWIG假设glm::vec2类只有x,y参数。

我不确定在SWIG中使用代理类是否是这样做的方法?或者其他方法?我对LUA集成和SWIG也很陌生。

我真的不想走的一条路是抛弃GLM,编写我自己的Vector/Matrix库,它更简单,没有模板等,然后我可以简单地用SWIG包装,但我觉得这是浪费时间,我最终会得到一个功能不那么强大的数学库:(.

提前感谢,如果需要的话,我可以提供更多的信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-14 21:11:35

luabind中的解决方案将如下所示:

代码语言:javascript
复制
#include <luabind/luabind.hpp>


extern "C" int init(lua_State* L)
{
    using namespace luabind;
    using namespace glm;

    open(L);

    module(L)
    [
        class_<dvec2>("dvec2")
            .def_readwrite("x", &dvec2::x)
            .def_readwrite("y", &dvec2::y)
    ];

    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2012-08-14 21:15:57

GLM的一个大问题是它的向量类型使用的东西具有可疑的C++有效性。许多编译器会允许,但标准不允许的事情。SWIG使用自己的解析器来工作,因此它将很难理解GLM的定义。

在这种情况下,我建议使用像Luabind这样的东西,而不是SWIG。在这种情况下,它提供了更细粒度的控制,并且它的好处是不使用自己的解析器。当然,您可以在.swig文件中有效地重写GLM的重要部分的原型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11949886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档