From: Stanislav Vorobiov Date: Fri, 18 Oct 2013 07:32:47 +0000 (+0400) Subject: YaGL/VIGS: Use OpenGL 3.0 context instead of 2.1 X-Git-Tag: TizenStudio_2.0_p2.3~343^2~56 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9d88a7418ae7fa7bf24639497d78a051d341523;p=sdk%2Femulator%2Fqemu.git YaGL/VIGS: Use OpenGL 3.0 context instead of 2.1 Change-Id: I514eb239da143feff1e4737bc2afa6ad3da93658 --- diff --git a/hw/vigs_gl_backend_glx.c b/hw/vigs_gl_backend_glx.c index 4176072..b499abe 100644 --- a/hw/vigs_gl_backend_glx.c +++ b/hw/vigs_gl_backend_glx.c @@ -52,11 +52,13 @@ struct vigs_gl_backend_glx PFNGLXGETFBCONFIGATTRIBPROC glXGetFBConfigAttrib; PFNGLXCREATEPBUFFERPROC glXCreatePbuffer; PFNGLXDESTROYPBUFFERPROC glXDestroyPbuffer; - PFNGLXCREATENEWCONTEXTPROC glXCreateNewContext; PFNGLXDESTROYCONTEXTPROC glXDestroyContext; PFNGLXMAKECONTEXTCURRENTPROC glXMakeContextCurrent; PFNGLXGETCURRENTCONTEXTPROC glXGetCurrentContext; + /* GLX_ARB_create_context */ + PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB; + Display *dpy; GLXPbuffer sfc; GLXContext ctx; @@ -141,14 +143,22 @@ static bool vigs_gl_backend_glx_create_surface(struct vigs_gl_backend_glx *gl_ba static bool vigs_gl_backend_glx_create_context(struct vigs_gl_backend_glx *gl_backend_glx, GLXFBConfig config) { - gl_backend_glx->ctx = gl_backend_glx->glXCreateNewContext(gl_backend_glx->dpy, - config, - GLX_RGBA_TYPE, - NULL, - True); + int attribs[] = + { + GLX_CONTEXT_MAJOR_VERSION_ARB, 3, + GLX_CONTEXT_MINOR_VERSION_ARB, 0, + GLX_RENDER_TYPE, GLX_RGBA_TYPE, + None + }; + + gl_backend_glx->ctx = gl_backend_glx->glXCreateContextAttribsARB(gl_backend_glx->dpy, + config, + NULL, + True, + attribs); if (!gl_backend_glx->ctx) { - VIGS_LOG_CRITICAL("glXCreateNewContext failed"); + VIGS_LOG_CRITICAL("glXCreateContextAttribsARB failed"); return false; } @@ -239,10 +249,10 @@ struct vigs_backend *vigs_gl_backend_create(void *display) VIGS_GLX_GET_PROC(PFNGLXGETFBCONFIGATTRIBPROC, glXGetFBConfigAttrib); VIGS_GLX_GET_PROC(PFNGLXCREATEPBUFFERPROC, glXCreatePbuffer); VIGS_GLX_GET_PROC(PFNGLXDESTROYPBUFFERPROC, glXDestroyPbuffer); - VIGS_GLX_GET_PROC(PFNGLXCREATENEWCONTEXTPROC, glXCreateNewContext); VIGS_GLX_GET_PROC(PFNGLXDESTROYCONTEXTPROC, glXDestroyContext); VIGS_GLX_GET_PROC(PFNGLXMAKECONTEXTCURRENTPROC, glXMakeContextCurrent); VIGS_GLX_GET_PROC(PFNGLXGETCURRENTCONTEXTPROC, glXGetCurrentContext); + VIGS_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB); VIGS_GL_GET_PROC(GenTextures, glGenTextures); VIGS_GL_GET_PROC(DeleteTextures, glDeleteTextures); diff --git a/hw/yagl_drivers/egl_glx/yagl_egl_glx.c b/hw/yagl_drivers/egl_glx/yagl_egl_glx.c index 7d35d45..eb0d2dc 100644 --- a/hw/yagl_drivers/egl_glx/yagl_egl_glx.c +++ b/hw/yagl_drivers/egl_glx/yagl_egl_glx.c @@ -88,6 +88,9 @@ struct yagl_egl_glx /* GLX 1.4 or GLX_ARB_get_proc_address */ PFNGLXGETPROCADDRESSPROC glXGetProcAddress; + + /* GLX_ARB_create_context */ + PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB; }; /* @@ -369,22 +372,29 @@ static EGLContext yagl_egl_glx_context_create(struct yagl_egl_driver *driver, { struct yagl_egl_glx *egl_glx = (struct yagl_egl_glx*)driver; GLXContext ctx; + int attribs[] = + { + GLX_CONTEXT_MAJOR_VERSION_ARB, 3, + GLX_CONTEXT_MINOR_VERSION_ARB, 0, + GLX_RENDER_TYPE, GLX_RGBA_TYPE, + None + }; YAGL_EGL_GLX_ENTER(yagl_egl_glx_context_create, "dpy = %p, share_context = %p", dpy, share_context); - ctx = egl_glx->glXCreateNewContext(dpy, - (GLXFBConfig)cfg->driver_data, - GLX_RGBA_TYPE, - ((share_context == EGL_NO_CONTEXT) ? - NULL - : (GLXContext)share_context), - True); + ctx = egl_glx->glXCreateContextAttribsARB(dpy, + (GLXFBConfig)cfg->driver_data, + ((share_context == EGL_NO_CONTEXT) ? + NULL + : (GLXContext)share_context), + True, + attribs); if (!ctx) { - YAGL_LOG_ERROR("glXCreateNewContext failed"); + YAGL_LOG_ERROR("glXCreateContextAttribsARB failed"); YAGL_LOG_FUNC_EXIT(NULL); @@ -524,6 +534,9 @@ struct yagl_egl_driver *yagl_egl_driver_create(void *display) YAGL_EGL_GLX_GET_PROC(PFNGLXCREATENEWCONTEXTPROC, glXCreateNewContext); YAGL_EGL_GLX_GET_PROC(PFNGLXMAKECONTEXTCURRENTPROC, glXMakeContextCurrent); + /* GLX_ARB_create_context */ + YAGL_EGL_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB); + egl_glx->base.display_open = &yagl_egl_glx_display_open; egl_glx->base.display_close = &yagl_egl_glx_display_close; egl_glx->base.config_enum = &yagl_egl_glx_config_enum;