lwjgl/src/native/linux/org_lwjgl_opengl_BaseGL.cpp

147 lines
3.8 KiB
C++
Raw Normal View History

2002-11-15 05:40:55 -05:00
/*
* Copyright (c) 2002 Light Weight Java Game Library Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'Light Weight Java Game Library' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* $Id$
*
2002-11-15 06:10:32 -05:00
* Base linux functionality for GL.
2002-11-15 05:40:55 -05:00
*
2002-11-15 06:10:32 -05:00
* @author elias_naur <elias_naur@users.sourceforge.net>
2002-11-15 05:40:55 -05:00
* @version $Revision$
*/
2002-11-19 02:42:55 -05:00
#include "extgl.h"
2002-11-15 05:40:55 -05:00
#include "org_lwjgl_opengl_BaseGL.h"
2003-02-09 12:01:01 -05:00
static GLXContext context = NULL; // OpenGL rendering context
2003-02-08 14:55:07 -05:00
extern XVisualInfo * getVisualInfo(void);
2002-11-15 05:40:55 -05:00
extern Window win;
extern Display * disp;
2003-03-21 18:28:00 -05:00
extern void handleMessages(JNIEnv* env);
2003-02-09 12:01:01 -05:00
static void makeCurrent(void) {
glXMakeCurrent(disp, win, context);
}
static void releaseContext(void) {
glXMakeCurrent(disp, None, NULL);
}
2002-11-15 05:40:55 -05:00
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: nCreate
* Signature: (IIII)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_opengl_BaseGL_nCreate
(JNIEnv * env, jobject obj)
2002-11-15 05:40:55 -05:00
{
2003-03-27 10:16:35 -05:00
if (disp == NULL) {
#ifdef _DEBUG
printf("No display\n");
#endif
return JNI_FALSE;
}
if (getVisualInfo() == NULL) {
2002-11-15 05:40:55 -05:00
#ifdef _DEBUG
printf("No visual info\n");
#endif
return JNI_FALSE;
}
2003-02-08 14:55:07 -05:00
context = glXCreateContext(disp, getVisualInfo(), NULL, True);
2003-03-27 10:16:35 -05:00
if (context == NULL) {
2002-11-15 05:40:55 -05:00
#ifdef _DEBUG
printf("Could not create context\n");
#endif
return JNI_FALSE;
}
makeCurrent();
2002-11-18 15:22:01 -05:00
if (extgl_Initialize() != 0) {
#ifdef _DEBUG
printf("Could not init gl function pointers\n");
#endif
return JNI_FALSE;
}
2002-11-25 15:35:01 -05:00
#ifdef _DEBUG
const GLubyte * extensions = glGetString(GL_EXTENSIONS);
printf("Supported extensions: %s\n", extensions);
#endif
2002-11-15 05:40:55 -05:00
return JNI_TRUE;
}
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: nDestroy
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nDestroy
(JNIEnv * env, jobject obj)
{
releaseContext();
2003-03-27 10:16:35 -05:00
glXDestroyContext(disp, context);
context = NULL;
2002-11-15 05:40:55 -05:00
}
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: swapBuffers
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_swapBuffers(JNIEnv * env, jobject obj)
{
2003-03-21 18:28:00 -05:00
handleMessages(env);
2002-11-15 05:40:55 -05:00
glXSwapBuffers(disp, win);
}
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: nMakeCurrent
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nMakeCurrent
(JNIEnv * env, jobject obj)
{
makeCurrent();
2002-11-15 05:40:55 -05:00
}
/*
* * Class: org_lwjgl_opengl_BaseGL
* * Method: nFreeContext
* * Signature: ()V
* */
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nReleaseContext
(JNIEnv *, jobject)
{
releaseContext();
}