【问题标题】:Compiling an OpenGL app written in C with Emscripten and Regal - Having compiling issues with Regal使用 Emscripten 和 Regal 编译用 C 编写的 OpenGL 应用程序 - Regal 出现编译问题
【发布时间】:2015-03-11 21:02:33
【问题描述】:

我一直在尝试编译我使用 OpenGL 2.1 和 C 编写的旧游戏。我想尝试使用 Emscripten 编译它。所以我继续用酱汁构建了工具和 SDK,编译了一些测试示例,一切都检查出来了。

长话短说,Emscripten 不太支持旧的/非 ES OpenGL(可以理解),但后来我读到 Regal 可以很好地用作解释器。

这就是我卡住的地方,我不知道如何组合 Regal。当我简单地替换 GL、GLU 和 GLUT 标头引用时,我得到了相同的 Emscripten 编译器警告,只是替换为似乎是 Regal 等价物:

警告:未解析的符号:rglPopMatrix 警告:未解析符号:rglShadeModel 警告:未解析符号:glutGameModeString 警告:未解析符号:rglLightfv 警告:未解析符号:rglMatrixMode 警告:未解析符号:glutSolidSphere 警告:未解析符号:rglLoadIdentity 警告:未解析符号:rglClear 警告:未解析符号:glutSolidCube 警告:未解析符号:rglTranslatef 警告:未解析符号:rglRotatef 警告:未解析符号:glutEnterGameMode 警告:未解析符号:rglMaterialfv 警告:未解析符号:rglPolygonMode 警告:未解析符号:rglPushMatrix 警告:未解析符号:rglGetFloatv 警告:未解析符号:rglViewport 警告:未解析符号:rglEnable

我在这里遗漏了一些简单或重要的东西吗?甚至解释为什么这不起作用/不应该起作用也会很棒。

如果我设法对此进行进一步了解,将发布更新。

附:我正在使用的编译器工具 - 操作系统是 Ubuntu 12.04,32 位

https://github.com/kripken/emscripten

https://github.com/p3/regal

编辑 2 我相当确定这是与 Regal 链接的问题,但除了简单的“包含 GL/Regal.H”和“与 libRegal.so 的链接”语句之外,我似乎找不到任何体面的文档或方法github页面。当我构建 Regal 包时,我使用了标准的“make all”命令。我还需要做更多的事情吗?

编辑 1 我当前的 makefile 是什么样子的

包括 = -L/home/BlastingKap/TestLibs/regal-master/lib/linux -lRegal -lRegalGLU -lRegalGLUT -s LEGACY_GL_EMULATION=1 -s GL_UNSAFE_OPTS=0

VoxelCannon:VoxelCannon.c graphics.c visible.c graphics.h ./emcc VoxelCannon.c graphics.c visible.c -o VoxCann​​on.html $(INCLUDES)

【问题讨论】:

  • 你链接libRegal.a了吗? (类似于emcc -lRegal foo.c
  • 是的,我正在链接 libRegal、libRegalGLU 和 libRegalGLUT(如果我链接最后两个似乎无关紧要)。

标签: c opengl compilation cross-compiling emscripten


【解决方案1】:

要摆脱警告 unresolved symbol: rgl*,您应该使用 REGAL_NAMESPACE=1 编译 Regal。对于 emscripten,您应该为 emscripten 编译 Regal。使用这个命令:

    emmake make -f Makefile SYSTEM=emscripten

然后从lib/emscripten (libRegallib) 添加到链接器静态库。

附:我也尝试使用 Regal+emscripten,并成功构建了我的项目。但是,当我运行它时,我什么也看不到。

UPD。您应该调用RegalMakeCurrent((RegalSystemContext)1); 将emscripten gl 上下文与regal gl 上下文相关联。像这样:

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(width, height);
    glutCreateWindow("app");

    RegalMakeCurrent((RegalSystemContext)1);

    glutDisplayFunc(draw);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多