Updated GTK GUI GLX window / context setup to better match glx code from snes9x GTK backend.
This commit is contained in:
parent
3618f30f0d
commit
c2a322e48f
|
@ -89,8 +89,14 @@ static void getAttrbList( GLint *buf )
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
||||||
buf[i] = GLX_RGBA; i++;
|
buf[i] = GLX_RGBA; i++;
|
||||||
buf[i] = GLX_DEPTH_SIZE; i++;
|
//buf[i] = GLX_DEPTH_SIZE; i++;
|
||||||
buf[i] = 24; i++;
|
//buf[i] = 24; i++;
|
||||||
|
buf[i] = GLX_RED_SIZE; i++;
|
||||||
|
buf[i] = 8; i++;
|
||||||
|
buf[i] = GLX_GREEN_SIZE; i++;
|
||||||
|
buf[i] = 8; i++;
|
||||||
|
buf[i] = GLX_BLUE_SIZE; i++;
|
||||||
|
buf[i] = 8; i++;
|
||||||
|
|
||||||
if ( double_buffer_ena )
|
if ( double_buffer_ena )
|
||||||
{
|
{
|
||||||
|
@ -392,6 +398,7 @@ int spawn_glxwin( int flags )
|
||||||
//************************************************************************
|
//************************************************************************
|
||||||
int init_gtk3_GLXContext( int flags )
|
int init_gtk3_GLXContext( int flags )
|
||||||
{
|
{
|
||||||
|
int screenNumber;
|
||||||
GLint att[32];
|
GLint att[32];
|
||||||
|
|
||||||
XWindowAttributes xattrb;
|
XWindowAttributes xattrb;
|
||||||
|
@ -410,12 +417,20 @@ int init_gtk3_GLXContext( int flags )
|
||||||
printf("Error: Failed to obtain gdkWindow Handle for evbox widget\n");
|
printf("Error: Failed to obtain gdkWindow Handle for evbox widget\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (!GDK_IS_X11_WINDOW (gdkWin))
|
||||||
|
{
|
||||||
|
printf("Error: GDK Window is not of X11 Type\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
GdkDisplay *gdk_display = gdk_window_get_display (gdkWin);
|
||||||
|
GdkScreen *gdk_screen = gdk_window_get_screen (gdkWin);
|
||||||
|
screenNumber = gdk_x11_screen_get_screen_number (gdk_screen);
|
||||||
|
dpy = GDK_DISPLAY_XDISPLAY( gdk_display );
|
||||||
|
|
||||||
win = GDK_WINDOW_XID( gdkWin );
|
win = GDK_WINDOW_XID( gdkWin );
|
||||||
|
|
||||||
root = GDK_ROOT_WINDOW();
|
root = GDK_ROOT_WINDOW();
|
||||||
|
|
||||||
dpy = gdk_x11_get_default_xdisplay();
|
|
||||||
|
|
||||||
if ( dpy == NULL )
|
if ( dpy == NULL )
|
||||||
{
|
{
|
||||||
printf("Error: Failed to obtain X Display Handle for evbox widget\n");
|
printf("Error: Failed to obtain X Display Handle for evbox widget\n");
|
||||||
|
@ -431,16 +446,64 @@ int init_gtk3_GLXContext( int flags )
|
||||||
//printf("XWinSize: (%i x %i) \n", xattrb.width, xattrb.height );
|
//printf("XWinSize: (%i x %i) \n", xattrb.width, xattrb.height );
|
||||||
//printf("XWinDepth: %i \n", xattrb.depth );
|
//printf("XWinDepth: %i \n", xattrb.depth );
|
||||||
//printf("XWinVisual: %p \n", xattrb.visual );
|
//printf("XWinVisual: %p \n", xattrb.visual );
|
||||||
|
printf("XScreenNumber: %i \n", screenNumber );
|
||||||
|
|
||||||
vi = glXChooseVisual(dpy, 0, att);
|
vi = glXChooseVisual(dpy, screenNumber, att);
|
||||||
|
|
||||||
if (vi == NULL)
|
if (vi == NULL)
|
||||||
{
|
{
|
||||||
printf("\n\tno appropriate visual found\n\n");
|
printf("\n\tno appropriate visual found\n\n");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
|
int val;
|
||||||
printf("\n\tvisual %p selected\n", (void *)vi->visualid); /* %p creates hexadecimal output like in glxinfo */
|
printf("\n\tvisual %p selected\n", (void *)vi->visualid); /* %p creates hexadecimal output like in glxinfo */
|
||||||
|
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_RGBA, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_RGBA: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_USE_GL, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_USE_GL: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_LEVEL, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_LEVEL: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_BUFFER_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_BUFFER_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_DOUBLEBUFFER, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_DOUBLEBUFFER: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_RED_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_RED_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_GREEN_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_GREEN_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_BLUE_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_BLUE_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_ALPHA_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_ALPHA_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_DEPTH_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_DEPTH_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
|
if ( glXGetConfig( dpy, vi, GLX_STENCIL_SIZE, &val ) == 0 )
|
||||||
|
{
|
||||||
|
printf("GLX_STENCIL_SIZE: %i \n", val );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( glc == NULL )
|
if ( glc == NULL )
|
||||||
|
@ -454,6 +517,11 @@ int init_gtk3_GLXContext( int flags )
|
||||||
}
|
}
|
||||||
XFree(vi); vi = NULL;
|
XFree(vi); vi = NULL;
|
||||||
|
|
||||||
|
if ( glc == NULL )
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
glXMakeCurrent(dpy, win, glc);
|
glXMakeCurrent(dpy, win, glc);
|
||||||
|
|
||||||
genTextures( flags & GLXWIN_PIXEL_LINEAR_FILTER ? 1 : 0 );
|
genTextures( flags & GLXWIN_PIXEL_LINEAR_FILTER ? 1 : 0 );
|
||||||
|
|
Loading…
Reference in New Issue