Updated GTK GUI GLX window / context setup to better match glx code from snes9x GTK backend.

This commit is contained in:
Matthew Budd 2020-08-14 20:42:54 -04:00
parent 3618f30f0d
commit c2a322e48f
1 changed files with 74 additions and 6 deletions

View File

@ -89,8 +89,14 @@ static void getAttrbList( GLint *buf )
int i=0;
buf[i] = GLX_RGBA; i++;
buf[i] = GLX_DEPTH_SIZE; i++;
buf[i] = 24; i++;
//buf[i] = GLX_DEPTH_SIZE; 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 )
{
@ -392,6 +398,7 @@ int spawn_glxwin( int flags )
//************************************************************************
int init_gtk3_GLXContext( int flags )
{
int screenNumber;
GLint att[32];
XWindowAttributes xattrb;
@ -410,12 +417,20 @@ int init_gtk3_GLXContext( int flags )
printf("Error: Failed to obtain gdkWindow Handle for evbox widget\n");
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 );
root = GDK_ROOT_WINDOW();
dpy = gdk_x11_get_default_xdisplay();
if ( dpy == NULL )
{
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("XWinDepth: %i \n", xattrb.depth );
//printf("XWinVisual: %p \n", xattrb.visual );
printf("XScreenNumber: %i \n", screenNumber );
vi = glXChooseVisual(dpy, 0, att);
vi = glXChooseVisual(dpy, screenNumber, att);
if (vi == NULL)
{
printf("\n\tno appropriate visual found\n\n");
exit(0);
}
else {
else
{
int val;
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 )
@ -454,6 +517,11 @@ int init_gtk3_GLXContext( int flags )
}
XFree(vi); vi = NULL;
if ( glc == NULL )
{
return -1;
}
glXMakeCurrent(dpy, win, glc);
genTextures( flags & GLXWIN_PIXEL_LINEAR_FILTER ? 1 : 0 );