Add missing new _glx files

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1197 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
beuc 2012-03-18 14:54:33 +00:00
parent 5d6c1b44f4
commit 468a43416d
6 changed files with 603 additions and 1 deletions

6
.gitattributes vendored
View File

@ -119,20 +119,24 @@ freeglut/freeglut/src/util/xparsegeometry_repl.c -text
freeglut/freeglut/src/util/xparsegeometry_repl.h -text freeglut/freeglut/src/util/xparsegeometry_repl.h -text
freeglut/freeglut/src/x11 svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11 svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_cursor_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_cursor_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_display_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_display_x11_glx.c -text
freeglut/freeglut/src/x11/fg_ext_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_ext_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_gamemode_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_gamemode_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_glutfont_definitions_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_glutfont_definitions_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_init_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_init_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_input_devices_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_input_devices_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_internal_x11.h svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_internal_x11.h svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_internal_x11_glx.h -text
freeglut/freeglut/src/x11/fg_joystick_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_joystick_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_main_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_main_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_menu_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_menu_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_spaceball_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_spaceball_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_state_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_state_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_state_x11_glx.c -text
freeglut/freeglut/src/x11/fg_structure_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_structure_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_window_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_window_x11.c svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/freeglut/src/x11/fg_window_x11_glx.c -text
freeglut/freeglut/src/x11/fg_window_x11_glx.h -text
freeglut/freeglut/src/x11/fg_xinput_x11.c -text svnc_svn_005fkeywords=Author+Date+Id+Revision freeglut/freeglut/src/x11/fg_xinput_x11.c -text svnc_svn_005fkeywords=Author+Date+Id+Revision
freeglut/web-src/basic_page.php svn_keywords=Author+Date+Id+Revision freeglut/web-src/basic_page.php svn_keywords=Author+Date+Id+Revision
freeglut/web-src/docs/api.php svn_keywords=Author+Date+Id+Revision freeglut/web-src/docs/api.php svn_keywords=Author+Date+Id+Revision

View File

@ -0,0 +1,84 @@
/*
* freeglut_internal_x11.h
*
* The freeglut library private include file.
*
* Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.
* Creation date: Fri Jan 20, 2012
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef FREEGLUT_INTERNAL_X11_GLX_H
#define FREEGLUT_INTERNAL_X11_GLX_H
/* If GLX is too old, we will fail during runtime when multisampling
is requested, but at least freeglut compiles. */
#ifndef GLX_SAMPLE_BUFFERS
# define GLX_SAMPLE_BUFFERS 0x80A8
#endif
#ifndef GLX_SAMPLES
# define GLX_SAMPLES 0x80A9
#endif
#ifndef GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB
#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2
#endif
#ifndef GLX_CONTEXT_MAJOR_VERSION_ARB
#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
#endif
#ifndef GLX_CONTEXT_MINOR_VERSION_ARB
#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
#endif
#ifndef GLX_CONTEXT_FLAGS_ARB
#define GLX_CONTEXT_FLAGS_ARB 0x2094
#endif
#ifndef GLX_CONTEXT_PROFILE_MASK_ARB
#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
#endif
#ifndef GLX_CONTEXT_DEBUG_BIT_ARB
#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001
#endif
#ifndef GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB
#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
#endif
#ifndef GLX_CONTEXT_CORE_PROFILE_BIT_ARB
#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
#endif
#ifndef GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB
#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
#endif
#ifndef GLX_RGBA_FLOAT_TYPE
#define GLX_RGBA_FLOAT_TYPE 0x20B9
#endif
#ifndef GLX_RGBA_FLOAT_BIT
#define GLX_RGBA_FLOAT_BIT 0x00000004
#endif
#endif

View File

@ -0,0 +1,213 @@
/*
* fg_state_x11_glx.c
*
* X11-specific freeglut state query methods.
*
* Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.
* Written by John F. Fay, <fayjf@sourceforge.net>
* Creation date: Sat Feb 4 2012
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <GL/freeglut.h>
#include "fg_internal.h"
/*
* Queries the GL context about some attributes
*/
int fgPlatformGetConfig( int attribute )
{
int returnValue = 0;
int result; /* Not checked */
if( fgStructure.CurrentWindow )
result = glXGetFBConfigAttrib( fgDisplay.pDisplay.Display,
fgStructure.CurrentWindow->Window.pContext.FBConfig,
attribute,
&returnValue );
return returnValue;
}
int fghPlatformGlutGetGLX ( GLenum eWhat )
{
switch( eWhat )
{
/*
* The window/context specific queries are handled mostly by
* fgPlatformGetConfig().
*/
case GLUT_WINDOW_NUM_SAMPLES:
{
int nsamples = 0;
#ifdef GLX_VERSION_1_3
glGetIntegerv(GL_SAMPLES, &nsamples);
#endif
return nsamples;
}
/*
* The rest of GLX queries under X are general enough to use a macro to
* check them
*/
# define GLX_QUERY(a,b) case a: return fgPlatformGetConfig( b );
GLX_QUERY( GLUT_WINDOW_RGBA, GLX_RGBA );
GLX_QUERY( GLUT_WINDOW_DOUBLEBUFFER, GLX_DOUBLEBUFFER );
GLX_QUERY( GLUT_WINDOW_BUFFER_SIZE, GLX_BUFFER_SIZE );
GLX_QUERY( GLUT_WINDOW_STENCIL_SIZE, GLX_STENCIL_SIZE );
GLX_QUERY( GLUT_WINDOW_DEPTH_SIZE, GLX_DEPTH_SIZE );
GLX_QUERY( GLUT_WINDOW_RED_SIZE, GLX_RED_SIZE );
GLX_QUERY( GLUT_WINDOW_GREEN_SIZE, GLX_GREEN_SIZE );
GLX_QUERY( GLUT_WINDOW_BLUE_SIZE, GLX_BLUE_SIZE );
GLX_QUERY( GLUT_WINDOW_ALPHA_SIZE, GLX_ALPHA_SIZE );
GLX_QUERY( GLUT_WINDOW_ACCUM_RED_SIZE, GLX_ACCUM_RED_SIZE );
GLX_QUERY( GLUT_WINDOW_ACCUM_GREEN_SIZE, GLX_ACCUM_GREEN_SIZE );
GLX_QUERY( GLUT_WINDOW_ACCUM_BLUE_SIZE, GLX_ACCUM_BLUE_SIZE );
GLX_QUERY( GLUT_WINDOW_ACCUM_ALPHA_SIZE, GLX_ACCUM_ALPHA_SIZE );
GLX_QUERY( GLUT_WINDOW_STEREO, GLX_STEREO );
# undef GLX_QUERY
/* I do not know yet if there will be a fgChooseVisual() function for Win32 */
case GLUT_DISPLAY_MODE_POSSIBLE:
{
/* We should not have to call fghChooseConfig again here. */
GLXFBConfig config;
return fghChooseConfig(&config);
}
/* This is system-dependant */
case GLUT_WINDOW_FORMAT_ID:
if( fgStructure.CurrentWindow == NULL )
return 0;
return fgPlatformGetConfig( GLX_VISUAL_ID );
default:
fgWarning( "glutGet(): missing enum handle %d", eWhat );
break;
}
return -1;
}
int *fgPlatformGlutGetModeValues(GLenum eWhat, int *size)
{
int *array;
int attributes[9];
GLXFBConfig * fbconfigArray; /* Array of FBConfigs */
int fbconfigArraySize; /* Number of FBConfigs in the array */
int attribute_name = 0;
array = NULL;
*size = 0;
switch (eWhat)
{
case GLUT_AUX:
case GLUT_MULTISAMPLE:
attributes[0] = GLX_BUFFER_SIZE;
attributes[1] = GLX_DONT_CARE;
switch (eWhat)
{
case GLUT_AUX:
/*
FBConfigs are now sorted by increasing number of auxiliary
buffers. We want at least one buffer.
*/
attributes[2] = GLX_AUX_BUFFERS;
attributes[3] = 1;
attributes[4] = None;
attribute_name = GLX_AUX_BUFFERS;
break;
case GLUT_MULTISAMPLE:
attributes[2] = GLX_AUX_BUFFERS;
attributes[3] = GLX_DONT_CARE;
attributes[4] = GLX_SAMPLE_BUFFERS;
attributes[5] = 1;
/*
FBConfigs are now sorted by increasing number of samples per
pixel. We want at least one sample.
*/
attributes[6] = GLX_SAMPLES;
attributes[7] = 1;
attributes[8] = None;
attribute_name = GLX_SAMPLES;
break;
}
fbconfigArray = glXChooseFBConfig(fgDisplay.pDisplay.Display,
fgDisplay.pDisplay.Screen,
attributes,
&fbconfigArraySize);
if (fbconfigArray != NULL)
{
int * temp_array;
int result; /* Returned by glXGetFBConfigAttrib. Not checked. */
int previous_value;
int i;
temp_array = malloc(sizeof(int) * fbconfigArraySize);
previous_value = 0;
for (i = 0; i < fbconfigArraySize; i++)
{
int value;
result = glXGetFBConfigAttrib(fgDisplay.pDisplay.Display,
fbconfigArray[i],
attribute_name,
&value);
if (value > previous_value)
{
temp_array[*size] = value;
previous_value = value;
(*size)++;
}
}
array = malloc(sizeof(int) * (*size));
for (i = 0; i < *size; i++)
{
array[i] = temp_array[i];
}
free(temp_array);
XFree(fbconfigArray);
}
break;
default:
break;
}
return array;
}

View File

@ -0,0 +1,266 @@
/*
* fg_window_x11_glx.c
*
* Window management methods for X11 with GLX
*
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
* Copied for Platform code by Evan Felix <karcaw at gmail.com>
* Creation date: Thur Feb 2 2012
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#define FREEGLUT_BUILDING_LIB
#include <GL/freeglut.h>
#include "fg_internal.h"
/* pushing attribute/value pairs into an array */
#define ATTRIB(a) attributes[where++]=(a)
#define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);}
/*
* Chooses a visual basing on the current display mode settings
*/
int fghChooseConfig(GLXFBConfig* fbconfig)
{
GLboolean wantIndexedMode = GL_FALSE;
int attributes[ 100 ];
int where = 0, numAuxBuffers;
/* First we have to process the display mode settings... */
if( fgState.DisplayMode & GLUT_INDEX ) {
ATTRIB_VAL( GLX_BUFFER_SIZE, 8 );
/* Buffer size is selected later. */
ATTRIB_VAL( GLX_RENDER_TYPE, GLX_COLOR_INDEX_BIT );
wantIndexedMode = GL_TRUE;
} else {
ATTRIB_VAL( GLX_RED_SIZE, 1 );
ATTRIB_VAL( GLX_GREEN_SIZE, 1 );
ATTRIB_VAL( GLX_BLUE_SIZE, 1 );
if( fgState.DisplayMode & GLUT_ALPHA ) {
ATTRIB_VAL( GLX_ALPHA_SIZE, 1 );
}
}
if( fgState.DisplayMode & GLUT_DOUBLE ) {
ATTRIB_VAL( GLX_DOUBLEBUFFER, True );
}
if( fgState.DisplayMode & GLUT_STEREO ) {
ATTRIB_VAL( GLX_STEREO, True );
}
if( fgState.DisplayMode & GLUT_DEPTH ) {
ATTRIB_VAL( GLX_DEPTH_SIZE, 1 );
}
if( fgState.DisplayMode & GLUT_STENCIL ) {
ATTRIB_VAL( GLX_STENCIL_SIZE, 1 );
}
if( fgState.DisplayMode & GLUT_ACCUM ) {
ATTRIB_VAL( GLX_ACCUM_RED_SIZE, 1 );
ATTRIB_VAL( GLX_ACCUM_GREEN_SIZE, 1 );
ATTRIB_VAL( GLX_ACCUM_BLUE_SIZE, 1 );
if( fgState.DisplayMode & GLUT_ALPHA ) {
ATTRIB_VAL( GLX_ACCUM_ALPHA_SIZE, 1 );
}
}
numAuxBuffers = fghNumberOfAuxBuffersRequested();
if ( numAuxBuffers > 0 ) {
ATTRIB_VAL( GLX_AUX_BUFFERS, numAuxBuffers );
}
if( fgState.DisplayMode & GLUT_SRGB ) {
ATTRIB_VAL( GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB, True );
}
if (fgState.DisplayMode & GLUT_MULTISAMPLE) {
ATTRIB_VAL(GLX_SAMPLE_BUFFERS, 1);
ATTRIB_VAL(GLX_SAMPLES, fgState.SampleNumber);
}
/* Push a terminator at the end of the list */
ATTRIB( None );
{
GLXFBConfig * fbconfigArray; /* Array of FBConfigs */
int fbconfigArraySize; /* Number of FBConfigs in the array */
/* Get all FBConfigs that match "attributes". */
fbconfigArray = glXChooseFBConfig( fgDisplay.pDisplay.Display,
fgDisplay.pDisplay.Screen,
attributes,
&fbconfigArraySize );
if (fbconfigArray != NULL)
{
int result; /* Returned by glXGetFBConfigAttrib, not checked. */
if( wantIndexedMode )
{
/*
* In index mode, we want the largest buffer size, i.e. visual
* depth. Here, FBConfigs are sorted by increasing buffer size
* first, so FBConfigs with the largest size come last.
*/
int bufferSizeMin, bufferSizeMax;
/* Get bufferSizeMin. */
result =
glXGetFBConfigAttrib( fgDisplay.pDisplay.Display,
fbconfigArray[0],
GLX_BUFFER_SIZE,
&bufferSizeMin );
/* Get bufferSizeMax. */
result =
glXGetFBConfigAttrib( fgDisplay.pDisplay.Display,
fbconfigArray[fbconfigArraySize - 1],
GLX_BUFFER_SIZE,
&bufferSizeMax );
if (bufferSizeMax > bufferSizeMin)
{
/*
* Free and reallocate fbconfigArray, keeping only FBConfigs
* with the largest buffer size.
*/
XFree(fbconfigArray);
/* Add buffer size token at the end of the list. */
where--;
ATTRIB_VAL( GLX_BUFFER_SIZE, bufferSizeMax );
ATTRIB( None );
fbconfigArray = glXChooseFBConfig( fgDisplay.pDisplay.Display,
fgDisplay.pDisplay.Screen,
attributes,
&fbconfigArraySize );
}
}
*fbconfig = fbconfigArray[0];
}
else
{
*fbconfig = NULL;
return 0;
}
XFree(fbconfigArray);
return 1;
}
}
static void fghFillContextAttributes( int *attributes ) {
int where = 0, contextFlags, contextProfile;
if ( !fghIsLegacyContextVersionRequested() ) {
ATTRIB_VAL( GLX_CONTEXT_MAJOR_VERSION_ARB, fgState.MajorVersion );
ATTRIB_VAL( GLX_CONTEXT_MINOR_VERSION_ARB, fgState.MinorVersion );
}
contextFlags =
fghMapBit( fgState.ContextFlags, GLUT_DEBUG, GLX_CONTEXT_DEBUG_BIT_ARB ) |
fghMapBit( fgState.ContextFlags, GLUT_FORWARD_COMPATIBLE, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB );
if ( contextFlags != 0 ) {
ATTRIB_VAL( GLX_CONTEXT_FLAGS_ARB, contextFlags );
}
contextProfile =
fghMapBit( fgState.ContextProfile, GLUT_CORE_PROFILE, GLX_CONTEXT_CORE_PROFILE_BIT_ARB ) |
fghMapBit( fgState.ContextProfile, GLUT_COMPATIBILITY_PROFILE, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB );
if ( contextProfile != 0 ) {
ATTRIB_VAL( GLX_CONTEXT_PROFILE_MASK_ARB, contextProfile );
}
ATTRIB( 0 );
}
typedef GLXContext (*CreateContextAttribsProc)(Display *dpy, GLXFBConfig config,
GLXContext share_list, Bool direct,
const int *attrib_list);
GLXContext fghCreateNewContext( SFG_Window* window )
{
/* for color model calculation */
int menu = ( window->IsMenu && !fgStructure.MenuContext );
int index_mode = ( fgState.DisplayMode & GLUT_INDEX );
/* "classic" context creation */
Display *dpy = fgDisplay.pDisplay.Display;
GLXFBConfig config = window->Window.pContext.FBConfig;
int render_type = ( !menu && index_mode ) ? GLX_COLOR_INDEX_TYPE : GLX_RGBA_TYPE;
GLXContext share_list = NULL;
Bool direct = ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT );
GLXContext context;
/* new context creation */
int attributes[9];
CreateContextAttribsProc createContextAttribs = (CreateContextAttribsProc) fgPlatformGetProcAddress( "glXCreateContextAttribsARB" );
/* glXCreateContextAttribsARB not found, yet the user has requested the new context creation */
if ( !createContextAttribs && !fghIsLegacyContextRequested() ) {
fgWarning( "OpenGL >2.1 context requested but glXCreateContextAttribsARB is not available! Falling back to legacy context creation" );
fgState.MajorVersion = 2;
fgState.MinorVersion = 1;
}
/* If nothing fancy has been required, simply use the old context creation GLX API entry */
if ( fghIsLegacyContextRequested() || !createContextAttribs )
{
context = glXCreateNewContext( dpy, config, render_type, share_list, direct );
if ( context == NULL ) {
fghContextCreationError();
}
return context;
}
/* color index mode is not available anymore with OpenGL 3.0 */
if ( render_type == GLX_COLOR_INDEX_TYPE ) {
fgWarning( "color index mode is deprecated, using RGBA mode" );
}
fghFillContextAttributes( attributes );
context = createContextAttribs( dpy, config, share_list, direct, attributes );
if ( context == NULL ) {
fghContextCreationError();
}
return context;
}
void fgPlatformSetWindow ( SFG_Window *window )
{
if ( window )
{
glXMakeContextCurrent(
fgDisplay.pDisplay.Display,
window->Window.Handle,
window->Window.Handle,
window->Window.Context
);
}
}

View File

@ -0,0 +1,35 @@
/*
* fg_window_x11_glx.c
*
* Window management methods for X11 with GLX
*
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
* Copied for Platform code by Evan Felix <karcaw at gmail.com>
* Creation date: Thur Feb 2 2012
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __FG_WINDOW_X11_GLX_H__
#define __FG_WINDOW_X11_GLX_H__
extern int fghChooseConfig( GLXFBConfig* fbconfig );
extern GLXContext fghCreateNewContext( SFG_Window* window );
#endif