Simple DirectMedia Layer 的 SDL_GL_GetProcAddress 是否与用于嵌入式系统的 OpenGL ES 2.0 一起工作
Is Simple DirectMedia Layer's SDL_GL_GetProcAddress working with OpenGL ES 2.0 for embedded systems
我正在为 Android 使用 OpenGL ES 2.0 和 SDL2 构建应用程序。 SDL_GL_GetProcAddress 是否在 Android 上使用 OpenGL ES 2.0?另外我知道 OpenGL ES 2.0 是 OpenGL 的一个子集,所以使用这种方法也可以在桌面系统上 运行 吗?
通过快速浏览 SDL 存储库,它应该是。
SDL_video.c
定义 SDL_GL_GetProcAddress
的实现只是为了检查您是否启动了 OpenGL 然后调用 _this->GL_GetProcAddress
,其中 _this
是视频驱动程序。
SDL_androidvideo.c
将其 GL_GetProcAddress
设置为 Android_GLES_GetProcAddress
,这是 SDL_EGL_GetProcAddress
.
的预处理器替代
到目前为止:如果您拨打 SDL_GL_GetProcAddress
,您将接通 SDL_EGL_GetProcAddress
。
SDL_egl.c
实现 SDL_EGL_GetProcAddress
但拒绝在 Android 上调用 eglGetProcAddress
。这看起来可能是一个错误 — 给出的原因是 this bug 但该错误的状态在 2013 年 6 月切换为 'Released',我相信这意味着此问题已在 Android 中修复三年多了。
除此之外,后备方法是使用 SDL_LoadFunction
,首先使用直接函数名称,然后在它后面加上一个下划线,前提是它足够短以适合静态声明的缓冲区。这是哪个。
(所以,警告:SDL_GL_GetProcAddress
绝对不是线程安全的,即使您采取了适当的共享组步骤来使用多个 GL 上下文,但如果您正在编写 SDL 程序,您可能不会没关系)
Android 应该使用 SDL_sysloadso
的 dlopen 版本,所以看起来 SDL_LoadFunction
是直接调用 dlsym
实现的。在 Android.
下我没有发现任何问题
因此,总而言之:是的,该调用应该有效。它将使用特定于平台的动态库加载器而不是 EGL 调用,尽管它可能不需要,但这只是一个实现细节。
我正在为 Android 使用 OpenGL ES 2.0 和 SDL2 构建应用程序。 SDL_GL_GetProcAddress 是否在 Android 上使用 OpenGL ES 2.0?另外我知道 OpenGL ES 2.0 是 OpenGL 的一个子集,所以使用这种方法也可以在桌面系统上 运行 吗?
通过快速浏览 SDL 存储库,它应该是。
SDL_video.c
定义 SDL_GL_GetProcAddress
的实现只是为了检查您是否启动了 OpenGL 然后调用 _this->GL_GetProcAddress
,其中 _this
是视频驱动程序。
SDL_androidvideo.c
将其 GL_GetProcAddress
设置为 Android_GLES_GetProcAddress
,这是 SDL_EGL_GetProcAddress
.
到目前为止:如果您拨打 SDL_GL_GetProcAddress
,您将接通 SDL_EGL_GetProcAddress
。
SDL_egl.c
实现 SDL_EGL_GetProcAddress
但拒绝在 Android 上调用 eglGetProcAddress
。这看起来可能是一个错误 — 给出的原因是 this bug 但该错误的状态在 2013 年 6 月切换为 'Released',我相信这意味着此问题已在 Android 中修复三年多了。
除此之外,后备方法是使用 SDL_LoadFunction
,首先使用直接函数名称,然后在它后面加上一个下划线,前提是它足够短以适合静态声明的缓冲区。这是哪个。
(所以,警告:SDL_GL_GetProcAddress
绝对不是线程安全的,即使您采取了适当的共享组步骤来使用多个 GL 上下文,但如果您正在编写 SDL 程序,您可能不会没关系)
Android 应该使用 SDL_sysloadso
的 dlopen 版本,所以看起来 SDL_LoadFunction
是直接调用 dlsym
实现的。在 Android.
因此,总而言之:是的,该调用应该有效。它将使用特定于平台的动态库加载器而不是 EGL 调用,尽管它可能不需要,但这只是一个实现细节。