Introduce function to acquire symbols from openGL library OS-specific way.
This is needed because only EGL OS-specific backend (glx, wgl e.t.c.) knows how
function addresses should be retreived.
Signed-off-by: Igor Mitsyanko <i.mitsyanko@samsung.com>
return NULL;
}
+
+void *yagl_egl_glx_procaddr_get(struct yagl_dyn_lib *dyn_lib,
+ const char *sym_name)
+{
+ PFNGLXGETPROCADDRESSPROC get_address = NULL;
+ void *ret_func = NULL;
+
+ get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddress");
+
+ if (!get_address) {
+ get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddressARB");
+ }
+
+ if (get_address) {
+ ret_func = (void *)get_address((const GLubyte *)sym_name);
+ }
+
+ if (!ret_func) {
+ ret_func = yagl_dyn_lib_get_sym(dyn_lib, sym_name);
+ }
+
+ return ret_func;
+}
#include "yagl_process.h"
#include "yagl_thread.h"
#include "yagl_tls.h"
-#include <GL/glx.h>
static YAGL_DEFINE_TLS(struct yagl_thread_state*, gles1_ogl_ts);
struct yagl_gles1_driver *yagl_gles1_ogl_create(struct yagl_dyn_lib *dyn_lib)
{
struct yagl_gles1_ogl *gles1_ogl = NULL;
- PFNGLXGETPROCADDRESSPROC get_address = NULL;
struct yagl_gles_ogl *gles_ogl = NULL;
YAGL_LOG_FUNC_ENTER_NPT(yagl_gles1_ogl_create, NULL);
goto fail;
}
- get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddress");
-
- if (!get_address) {
- get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddressARB");
- }
-
YAGL_GLES_OGL_GET_PROC(gles1_ogl, glAlphaFunc);
YAGL_GLES_OGL_GET_PROC(gles1_ogl, glColor4f);
YAGL_GLES_OGL_GET_PROC(gles1_ogl, glDepthRangef);
#include "yagl_process.h"
#include "yagl_thread.h"
#include "yagl_tls.h"
-#include <GL/glx.h>
static YAGL_DEFINE_TLS(struct yagl_thread_state*, gles2_ogl_ts);
struct yagl_gles2_driver *yagl_gles2_ogl_create(struct yagl_dyn_lib *dyn_lib)
{
struct yagl_gles2_ogl *gles2_ogl = NULL;
- PFNGLXGETPROCADDRESSPROC get_address = NULL;
struct yagl_gles_ogl *gles_ogl = NULL;
YAGL_LOG_FUNC_ENTER_NPT(yagl_gles2_ogl_create, NULL);
goto fail;
}
- get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddress");
-
- if (!get_address) {
- get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddressARB");
- }
-
YAGL_GLES_OGL_GET_PROC(gles2_ogl, glAttachShader);
YAGL_GLES_OGL_GET_PROC(gles2_ogl, glBindAttribLocation);
YAGL_GLES_OGL_GET_PROC(gles2_ogl, glBlendColor);
#include "yagl_log.h"
#include "yagl_dyn_lib.h"
#include "yagl_process.h"
-#include <GL/glx.h>
struct yagl_gles_ogl
{
*yagl_gles_ogl_create(struct yagl_dyn_lib *dyn_lib)
{
struct yagl_gles_ogl *gles_ogl;
- PFNGLXGETPROCADDRESSPROC get_address = NULL;
YAGL_LOG_FUNC_ENTER_NPT(yagl_gles_ogl_create, NULL);
gles_ogl = g_malloc0(sizeof(*gles_ogl));
- get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddress");
-
- if (!get_address) {
- get_address = yagl_dyn_lib_get_sym(dyn_lib, "glXGetProcAddressARB");
- }
-
YAGL_GLES_OGL_GET_PROC(gles_ogl, glActiveTexture);
YAGL_GLES_OGL_GET_PROC(gles_ogl, glBindBuffer);
YAGL_GLES_OGL_GET_PROC(gles_ogl, glBindTexture);
#define YAGL_GLES_OGL_GET_PROC(driver, func) \
do { \
- if (get_address) { \
- *(void**)(&driver->func) = get_address((const GLubyte*)#func); \
- } \
+ *(void**)(&driver->func) = yagl_dyn_lib_procaddr_get(dyn_lib, #func); \
if (!driver->func) { \
- *(void**)(&driver->func) = yagl_dyn_lib_get_sym(dyn_lib, #func); \
- if (!driver->func) { \
- YAGL_LOG_ERROR("Unable to get symbol: %s", \
- yagl_dyn_lib_get_error(dyn_lib)); \
- goto fail; \
- } \
+ YAGL_LOG_ERROR("Unable to get symbol: %s", \
+ yagl_dyn_lib_get_error(dyn_lib)); \
+ goto fail; \
} \
} while (0)
const char *yagl_dyn_lib_get_error(struct yagl_dyn_lib *dyn_lib);
+#ifdef CONFIG_YAGL_EGL_GLX
+
+void *yagl_egl_glx_procaddr_get(struct yagl_dyn_lib *dyn_lib,
+ const char *sym_name);
+
+static inline void *yagl_dyn_lib_procaddr_get(struct yagl_dyn_lib *dyn_lib,
+ const char *sym_name)
+{
+ return yagl_egl_glx_procaddr_get(dyn_lib, sym_name);
+}
+
+#else
+#error Unknown EGL backend
+#endif
+
#endif