Moved platform specific opengl extension flags into the platform specific files

This commit is contained in:
Elias Naur 2005-02-17 12:39:33 +00:00
parent 412dfc7462
commit 2d5c4cf934
10 changed files with 76 additions and 79 deletions

View File

@ -49,10 +49,6 @@ THE POSSIBILITY OF SUCH DAMAGE.
#include <dlfcn.h>
#endif
#ifndef _MACOSX
struct ExtensionTypes extgl_Extensions;
#endif
#ifdef _WIN32
HMODULE lib_gl_handle = NULL;
#endif

View File

@ -158,35 +158,6 @@ typedef unsigned short GLhalf;
/* helper stuff */
#ifndef _MACOSX
struct ExtensionTypes
{
#ifdef _WIN32 /* WGL extensions */
bool WGL_ARB_buffer_region;
bool WGL_ARB_extensions_string;
bool WGL_ARB_make_current_read;
bool WGL_ARB_multisample;
bool WGL_ARB_pbuffer;
bool WGL_ARB_pixel_format;
bool WGL_ARB_render_texture;
bool WGL_EXT_extensions_string;
bool WGL_EXT_swap_control;
bool WGL_NV_render_depth_texture;
bool WGL_NV_render_texture_rectangle;
#endif /* WIN32 */
#ifdef _X11
bool GLX12;
bool GLX13;
bool GLX_EXT_visual_info;
bool GLX_EXT_visual_rating;
bool GLX_SGI_swap_control;
bool GLX_ARB_multisample;
#endif /* X11 */
};
extern struct ExtensionTypes extgl_Extensions;
#endif
/* initializes everything, call this right after the rc is created. the function returns true if successful */
extern bool extgl_Open(JNIEnv *env);
extern void extgl_Close(void);

View File

@ -31,6 +31,8 @@
*/
#include "extgl_glx.h"
GLXExtensions extension_flags;
glXGetFBConfigsPROC glXGetFBConfigs = NULL;
glXChooseFBConfigPROC glXChooseFBConfig = NULL;
glXGetFBConfigAttribPROC glXGetFBConfigAttrib = NULL;
@ -101,8 +103,8 @@ static void extgl_InitGLX13(JNIEnv *env)
{"glXQueryContext", (void*)&glXQueryContext},
{"glXSelectEvent", (void*)&glXSelectEvent},
{"glXGetSelectedEvent", (void*)&glXGetSelectedEvent}};
if (extgl_Extensions.GLX13)
extgl_Extensions.GLX13 = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.GLX13)
extension_flags.GLX13 = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
static bool extgl_InitGLX12(void)
@ -133,32 +135,32 @@ static bool extgl_InitGLX12(void)
static void extgl_InitGLXSupportedExtensions(JNIEnv *env, Display *disp, int screen)
{
extgl_Extensions.GLX_EXT_visual_info = GLXQueryExtension(env, disp, screen, "GLX_EXT_visual_info");
extgl_Extensions.GLX_EXT_visual_rating = GLXQueryExtension(env, disp, screen, "GLX_EXT_visual_rating");
extgl_Extensions.GLX_SGI_swap_control = GLXQueryExtension(env, disp, screen, "GLX_SGI_swap_control");
extgl_Extensions.GLX_ARB_multisample = GLXQueryExtension(env, disp, screen, "GLX_ARB_multisample");
extension_flags.GLX_EXT_visual_info = GLXQueryExtension(env, disp, screen, "GLX_EXT_visual_info");
extension_flags.GLX_EXT_visual_rating = GLXQueryExtension(env, disp, screen, "GLX_EXT_visual_rating");
extension_flags.GLX_SGI_swap_control = GLXQueryExtension(env, disp, screen, "GLX_SGI_swap_control");
extension_flags.GLX_ARB_multisample = GLXQueryExtension(env, disp, screen, "GLX_ARB_multisample");
}
static void extgl_InitGLXSGISwapControl(JNIEnv *env)
{
ExtFunction functions[] = {
{"glXSwapIntervalSGI", (void*)&glXSwapIntervalSGI}};
if (extgl_Extensions.GLX_SGI_swap_control)
extgl_Extensions.GLX_SGI_swap_control = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.GLX_SGI_swap_control)
extension_flags.GLX_SGI_swap_control = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
bool extgl_InitGLX(JNIEnv *env, Display *disp, int screen)
{
int major, minor;
/* Assume glx ver >= 1.2 */
extgl_Extensions.GLX12 = true;
extension_flags.GLX12 = true;
if (!extgl_InitGLX12())
return false;
extgl_InitGLXSupportedExtensions(env, disp, screen);
if (glXQueryVersion(disp, &major, &minor) != True)
return false;
if (major > 1 || (major == 1 && minor >= 3))
extgl_Extensions.GLX13 = true;
extension_flags.GLX13 = true;
extgl_InitGLX13(env);
extgl_InitGLXSGISwapControl(env);
return true;

View File

@ -312,6 +312,17 @@ typedef const char * (APIENTRY * glXQueryExtensionsStringPROC) (Display *dpy, in
/* GLX_SGI_swap_control */
typedef void (APIENTRY * glXSwapIntervalSGIPROC)(int interval);
typedef struct {
bool GLX12;
bool GLX13;
bool GLX_EXT_visual_info;
bool GLX_EXT_visual_rating;
bool GLX_SGI_swap_control;
bool GLX_ARB_multisample;
} GLXExtensions;
extern GLXExtensions extension_flags;
extern glXGetFBConfigsPROC glXGetFBConfigs;
extern glXChooseFBConfigPROC glXChooseFBConfig;
extern glXGetFBConfigAttribPROC glXGetFBConfigAttrib;

View File

@ -54,7 +54,7 @@
#include "display.h"
#include "org_lwjgl_opengl_LinuxDisplay.h"
#define USEGLX13 extgl_Extensions.GLX13
#define USEGLX13 extension_flags.GLX13
#define ERR_MSG_SIZE 1024
typedef struct {
@ -511,7 +511,7 @@ static GLXFBConfig *chooseVisualGLX13FromBPP(JNIEnv *env, jobject pixel_format,
putAttrib(&attrib_list, GLX_ACCUM_BLUE_SIZE); putAttrib(&attrib_list, accum_bpe);
putAttrib(&attrib_list, GLX_ACCUM_ALPHA_SIZE); putAttrib(&attrib_list, accum_alpha);
putAttrib(&attrib_list, GLX_STEREO); putAttrib(&attrib_list, stereo ? True : False);
if (samples > 0 && extgl_Extensions.GLX_ARB_multisample) {
if (samples > 0 && extension_flags.GLX_ARB_multisample) {
putAttrib(&attrib_list, GLX_SAMPLE_BUFFERS_ARB); putAttrib(&attrib_list, 1);
putAttrib(&attrib_list, GLX_SAMPLES_ARB); putAttrib(&attrib_list, samples);
}
@ -573,7 +573,7 @@ static XVisualInfo *chooseVisualGLX(JNIEnv *env, jobject pixel_format) {
putAttrib(&attrib_list, GLX_ACCUM_ALPHA_SIZE); putAttrib(&attrib_list, accum_alpha);
if (stereo)
putAttrib(&attrib_list, GLX_STEREO);
if (samples > 0 && extgl_Extensions.GLX_ARB_multisample) {
if (samples > 0 && extension_flags.GLX_ARB_multisample) {
putAttrib(&attrib_list, GLX_SAMPLE_BUFFERS_ARB); putAttrib(&attrib_list, 1);
putAttrib(&attrib_list, GLX_SAMPLES_ARB); putAttrib(&attrib_list, samples);
}
@ -591,7 +591,7 @@ static void dumpVisualInfo(JNIEnv *env, XVisualInfo *vis_info) {
glXGetConfig(getDisplay(), vis_info, GLX_ALPHA_SIZE, &alpha);
glXGetConfig(getDisplay(), vis_info, GLX_DEPTH_SIZE, &depth);
glXGetConfig(getDisplay(), vis_info, GLX_STENCIL_SIZE, &stencil);
if (extgl_Extensions.GLX_ARB_multisample) {
if (extension_flags.GLX_ARB_multisample) {
glXGetConfig(getDisplay(), vis_info, GLX_SAMPLE_BUFFERS_ARB, &sample_buffers);
glXGetConfig(getDisplay(), vis_info, GLX_SAMPLES_ARB, &samples);
}
@ -793,7 +793,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nIsActive
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nSetVSyncEnabled
(JNIEnv *env, jobject this, jboolean sync)
{
if (extgl_Extensions.GLX_SGI_swap_control) {
if (extension_flags.GLX_SGI_swap_control) {
bool vsync = sync == JNI_TRUE ? true : false;
if (vsync != vsync_enabled) {
int interval = vsync ? 1 : 0;

View File

@ -53,7 +53,7 @@ typedef struct _PbufferInfo {
static bool isPbuffersSupported() {
// Only support the GLX 1.3 Pbuffers and ignore the GLX_SGIX_pbuffer extension
return extgl_Extensions.GLX13 ? org_lwjgl_opengl_Pbuffer_PBUFFER_SUPPORTED : 0;
return extension_flags.GLX13 ? org_lwjgl_opengl_Pbuffer_PBUFFER_SUPPORTED : 0;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nGetPbufferCapabilities

View File

@ -39,6 +39,8 @@ THE POSSIBILITY OF SUCH DAMAGE.
#include "extgl_wgl.h"
#include "common_tools.h"
WGLExtensions extension_flags;
/* WGL_EXT_etxension_string */
wglGetExtensionsStringEXTPROC wglGetExtensionsStringEXT = NULL;
@ -100,8 +102,8 @@ static void extgl_InitWGLARBPbuffer(JNIEnv *env)
{"wglReleasePbufferDCARB", (void **)&wglReleasePbufferDCARB},
{"wglDestroyPbufferARB", (void **)&wglDestroyPbufferARB},
{"wglQueryPbufferARB", (void **)&wglQueryPbufferARB}};
if (extgl_Extensions.WGL_ARB_pbuffer)
extgl_Extensions.WGL_ARB_pbuffer = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.WGL_ARB_pbuffer)
extension_flags.WGL_ARB_pbuffer = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
static void extgl_InitWGLARBPixelFormat(JNIEnv *env)
@ -110,8 +112,8 @@ static void extgl_InitWGLARBPixelFormat(JNIEnv *env)
{"wglGetPixelFormatAttribivARB", (void **)&wglGetPixelFormatAttribivARB},
{"wglGetPixelFormatAttribfvARB", (void **)&wglGetPixelFormatAttribfvARB},
{"wglChoosePixelFormatARB", (void **)&wglChoosePixelFormatARB}};
if (extgl_Extensions.WGL_ARB_pixel_format)
extgl_Extensions.WGL_ARB_pixel_format = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.WGL_ARB_pixel_format)
extension_flags.WGL_ARB_pixel_format = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
static void extgl_InitWGLARBRenderTexture(JNIEnv *env)
@ -120,8 +122,8 @@ static void extgl_InitWGLARBRenderTexture(JNIEnv *env)
{"wglBindTexImageARB", (void **)&wglBindTexImageARB},
{"wglReleaseTexImageARB", (void **)&wglReleaseTexImageARB},
{"wglSetPbufferAttribARB", (void **)&wglSetPbufferAttribARB}};
if (extgl_Extensions.WGL_ARB_render_texture)
extgl_Extensions.WGL_ARB_render_texture = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.WGL_ARB_render_texture)
extension_flags.WGL_ARB_render_texture = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
static void extgl_InitWGLEXTSwapControl(JNIEnv *env)
@ -129,8 +131,8 @@ static void extgl_InitWGLEXTSwapControl(JNIEnv *env)
ExtFunction functions[] = {
{"wglSwapIntervalEXT", (void **)&wglSwapIntervalEXT},
{"wglGetSwapIntervalEXT", (void **)&wglGetSwapIntervalEXT}};
if (extgl_Extensions.WGL_EXT_swap_control)
extgl_Extensions.WGL_EXT_swap_control = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.WGL_EXT_swap_control)
extension_flags.WGL_EXT_swap_control = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
static void extgl_InitWGLARBMakeCurrentRead(JNIEnv *env)
@ -138,21 +140,21 @@ static void extgl_InitWGLARBMakeCurrentRead(JNIEnv *env)
ExtFunction functions[] = {
{"wglMakeContextCurrentARB", (void **)&wglMakeContextCurrentARB},
{"wglGetCurrentReadDCARB", (void **)&wglGetCurrentReadDCARB}};
if (extgl_Extensions.WGL_ARB_make_current_read)
extgl_Extensions.WGL_ARB_make_current_read = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
if (extension_flags.WGL_ARB_make_current_read)
extension_flags.WGL_ARB_make_current_read = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}
static void extgl_InitSupportedWGLExtensions(JNIEnv *env)
{
extgl_Extensions.WGL_ARB_buffer_region = WGLQueryExtension(env, "WGL_ARB_buffer_region");
extgl_Extensions.WGL_ARB_make_current_read = WGLQueryExtension(env, "WGL_ARB_make_current_read");
extgl_Extensions.WGL_ARB_multisample = WGLQueryExtension(env, "WGL_ARB_multisample");
extgl_Extensions.WGL_ARB_pbuffer = WGLQueryExtension(env, "WGL_ARB_pbuffer");
extgl_Extensions.WGL_ARB_pixel_format = WGLQueryExtension(env, "WGL_ARB_pixel_format");
extgl_Extensions.WGL_ARB_render_texture = WGLQueryExtension(env, "WGL_ARB_render_texture");
extgl_Extensions.WGL_EXT_swap_control = WGLQueryExtension(env, "WGL_EXT_swap_control");
extgl_Extensions.WGL_NV_render_depth_texture = WGLQueryExtension(env, "WGL_NV_render_depth_texture");
extgl_Extensions.WGL_NV_render_texture_rectangle = WGLQueryExtension(env, "WGL_NV_render_texture_rectangle");
extension_flags.WGL_ARB_buffer_region = WGLQueryExtension(env, "WGL_ARB_buffer_region");
extension_flags.WGL_ARB_make_current_read = WGLQueryExtension(env, "WGL_ARB_make_current_read");
extension_flags.WGL_ARB_multisample = WGLQueryExtension(env, "WGL_ARB_multisample");
extension_flags.WGL_ARB_pbuffer = WGLQueryExtension(env, "WGL_ARB_pbuffer");
extension_flags.WGL_ARB_pixel_format = WGLQueryExtension(env, "WGL_ARB_pixel_format");
extension_flags.WGL_ARB_render_texture = WGLQueryExtension(env, "WGL_ARB_render_texture");
extension_flags.WGL_EXT_swap_control = WGLQueryExtension(env, "WGL_EXT_swap_control");
extension_flags.WGL_NV_render_depth_texture = WGLQueryExtension(env, "WGL_NV_render_depth_texture");
extension_flags.WGL_NV_render_texture_rectangle = WGLQueryExtension(env, "WGL_NV_render_texture_rectangle");
}
void extgl_InitWGL(JNIEnv *env)
@ -161,8 +163,8 @@ void extgl_InitWGL(JNIEnv *env)
{"wglGetExtensionsStringARB", (void **)&wglGetExtensionsStringARB},
{"wglGetExtensionsStringEXT", (void **)&wglGetExtensionsStringEXT}};
extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
extgl_Extensions.WGL_ARB_extensions_string = wglGetExtensionsStringARB != NULL;
extgl_Extensions.WGL_EXT_extensions_string = wglGetExtensionsStringEXT != NULL;
extension_flags.WGL_ARB_extensions_string = wglGetExtensionsStringARB != NULL;
extension_flags.WGL_EXT_extensions_string = wglGetExtensionsStringEXT != NULL;
extgl_InitSupportedWGLExtensions(env);

View File

@ -38,6 +38,21 @@ THE POSSIBILITY OF SUCH DAMAGE.
#include <windows.h>
typedef struct {
bool WGL_ARB_buffer_region;
bool WGL_ARB_extensions_string;
bool WGL_ARB_make_current_read;
bool WGL_ARB_multisample;
bool WGL_ARB_pbuffer;
bool WGL_ARB_pixel_format;
bool WGL_ARB_render_texture;
bool WGL_EXT_extensions_string;
bool WGL_EXT_swap_control;
bool WGL_NV_render_depth_texture;
bool WGL_NV_render_texture_rectangle;
} WGLExtensions;
extern WGLExtensions extension_flags;
extern void extgl_InitWGL(JNIEnv *env);
@ -186,4 +201,4 @@ extern wglGetCurrentReadDCARBPROC wglGetCurrentReadDCARB;
#define WGL_SAMPLES_ARB 0x2042
#endif
#endif

View File

@ -121,7 +121,7 @@ static int findPixelFormatARBFromBPP(JNIEnv *env, HDC hdc, jobject pixel_format,
putAttrib(&attrib_list, WGL_ALPHA_BITS_ARB); putAttrib(&attrib_list, alpha);
putAttrib(&attrib_list, WGL_DEPTH_BITS_ARB); putAttrib(&attrib_list, depth);
putAttrib(&attrib_list, WGL_STENCIL_BITS_ARB); putAttrib(&attrib_list, stencil);
if (samples > 0 && extgl_Extensions.WGL_ARB_multisample) {
if (samples > 0 && extension_flags.WGL_ARB_multisample) {
putAttrib(&attrib_list, WGL_SAMPLE_BUFFERS_ARB); putAttrib(&attrib_list, 1);
putAttrib(&attrib_list, WGL_SAMPLES_ARB); putAttrib(&attrib_list, samples);
}
@ -130,7 +130,7 @@ static int findPixelFormatARBFromBPP(JNIEnv *env, HDC hdc, jobject pixel_format,
putAttrib(&attrib_list, WGL_STEREO_ARB); putAttrib(&attrib_list, stereo ? TRUE : FALSE);
putAttrib(&attrib_list, WGL_AUX_BUFFERS_ARB); putAttrib(&attrib_list, num_aux_buffers);
if ( pixelFormatCaps != NULL ) {
if ( !extgl_Extensions.WGL_ARB_render_texture ) {
if ( !extension_flags.WGL_ARB_render_texture ) {
return -1;
}
@ -620,7 +620,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_Win32Display_isActive
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_setVSyncEnabled
(JNIEnv * env, jobject self, jboolean sync)
{
if (extgl_Extensions.WGL_EXT_swap_control) {
if (extension_flags.WGL_EXT_swap_control) {
if (sync == JNI_TRUE) {
wglSwapIntervalEXT(1);
} else {
@ -714,7 +714,7 @@ bool createARBContextAndPixelFormat(JNIEnv *env, HDC hdc, jobject pixel_format,
// Some crazy strangeness here so we can use ARB_pixel_format to specify the number
// of multisamples we want. If the extension is present we'll delete the existing
// rendering context and start over, using the ARB extension instead to pick the context.
if (!extgl_Extensions.WGL_ARB_pixel_format)
if (!extension_flags.WGL_ARB_pixel_format)
return false;
pixel_format_index = findPixelFormatARB(env, hdc, pixel_format, NULL, true, true, true, true);
if (pixel_format_index == -1) {

View File

@ -56,7 +56,7 @@ typedef struct _PbufferInfo {
} PbufferInfo;
static bool isPbuffersSupported() {
return extgl_Extensions.WGL_ARB_pixel_format && extgl_Extensions.WGL_ARB_pbuffer;
return extension_flags.WGL_ARB_pixel_format && extension_flags.WGL_ARB_pbuffer;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Win32Display_getPbufferCapabilities
@ -66,13 +66,13 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Win32Display_getPbufferCapabilities
if (isPbuffersSupported())
caps |= org_lwjgl_opengl_Pbuffer_PBUFFER_SUPPORTED;
if (extgl_Extensions.WGL_ARB_render_texture)
if (extension_flags.WGL_ARB_render_texture)
caps |= org_lwjgl_opengl_Pbuffer_RENDER_TEXTURE_SUPPORTED;
if (extgl_Extensions.WGL_NV_render_texture_rectangle)
if (extension_flags.WGL_NV_render_texture_rectangle)
caps |= org_lwjgl_opengl_Pbuffer_RENDER_TEXTURE_RECTANGLE_SUPPORTED;
if (extgl_Extensions.WGL_NV_render_depth_texture)
if (extension_flags.WGL_NV_render_depth_texture)
caps |= org_lwjgl_opengl_Pbuffer_RENDER_DEPTH_TEXTURE_SUPPORTED;
return caps;