c++ - 不同类型的Typedef重定义(Emscripten SDL2+OpenGL)

标签 c++ opengl-es-2.0 sdl-2 glew emscripten

我想创建一个 OpenGL+SDL2 程序,并使用 Emscripten 编译它。但不幸的是我什至无法启动它,因为我在包含时遇到错误:

#include <iostream>
#include <string>

#include <emscripten.h>

#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>

#define GLFW_INCLUDE_ES2
#include <GL/glew.h>
#include <SDL_opengles2.h>
#include <GL/glu.h>

错误是:

D:\Emscripten\emscripten\1.35.0\system\include\GLES2/gl2.h:39:26: error:
      typedef redefinition with different types ('khronos_ssize_t' (aka 'long')
      vs 'ptrdiff_t' (aka 'int'))
typedef khronos_ssize_t  GLsizeiptr;

后来添加了#define GLFW_INCLUDE_ES2行,但并没有解决问题。

我使用这个参数编译它:

USE_SDL=2 -s USE_SDL_IMAGE=2 -s SDL2_IMAGE_FORMATS=['png'] -s USE_SDL_TTF=2

最佳答案

glew官方版完全不支持OpenGL ES,只支持桌面版OpenGL(OpenGLES是针对移动设备的,尽管它仍然可以在大多数台式机上运行,​​但glew并没有与之兼容)

因此您需要使用经典的 OpenGL(不能在移动设备上运行)或摆脱 glew。

请注意,存在一些支持 OpenGL ES 的非官方 glew 分支,例如 Linaro 的 glew-es。

感谢奥术工程师,请在此处查看他的回答:https://stackoverflow.com/a/31474052/5085551

关于c++ - 不同类型的Typedef重定义(Emscripten SDL2+OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37775194/

相关文章:

c++ - SDL2 在 OSX 上从不同线程创建纹理

c++ - 插入 std::map 并将获得的迭代器操作到插入的元素

Android OpenGLES 2.0 纹理映射不工作

c++ - 使用 SDL2 在每一帧上渲染屏幕的一部分

java - OpenGL ES 2.0 - 在运行时创建位图,用作纹理 - 具有透明度

java - libgdx 中的多个摄像头(在其他框架中可能类似)

c++ - 是否可以将 SDL2 与智能指针一起使用?

c++ - cout << i << "\n"[ i == n ] 术语在做什么?

c++ - 已编译的 C 可执行文件被 Windows Defender 检测为病毒

c++ - 在二叉树中插入 4 或 5 个数字,但在输出中只得到 3 个数字