From 56a45b2cb402c9261d1b8b7edcda38d6c20f168e Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 8 Sep 2003 16:40:52 +0000 Subject: [PATCH] *** empty log message *** --- src/native/Makefile.am | 1 + src/native/configure.in | 1 + src/native/macosx/Makefile.am | 4 +- src/native/macosx/org_lwjgl_Display.cpp | 257 +++--------------- src/native/macosx/org_lwjgl_Sys.cpp | 35 +-- src/native/macosx/org_lwjgl_opengl_Window.cpp | 1 + 6 files changed, 51 insertions(+), 248 deletions(-) diff --git a/src/native/Makefile.am b/src/native/Makefile.am index 8f15c9e9..ad360b4f 100644 --- a/src/native/Makefile.am +++ b/src/native/Makefile.am @@ -1,6 +1,7 @@ SUBDIRS = common @native_build_dir@ lib_LTLIBRARIES = liblwjgl.la +liblwjgl_la_LDFLAGS = -framework Carbon liblwjgl_la_SOURCES = dummy.cpp liblwjgl_la_LIBADD = common/libcommon.la @native_build_dir@/libnative.la liblwjgl_la_DEPENDENCIES = common/libcommon.la @native_build_dir@/libnative.la diff --git a/src/native/configure.in b/src/native/configure.in index c1d29623..8e7741f5 100644 --- a/src/native/configure.in +++ b/src/native/configure.in @@ -30,6 +30,7 @@ AC_CANONICAL_HOST case "$host_os" in darwin*) _BUILD_FLAGS="-D_AGL -fpascal-strings" + LIBS="-framework Carbon -framework JavaVM" NATIVE_BUILD_DIR=macosx CXXFLAGS="$CXXFLAGS $DEBUG_FLAGS -Wall $_BUILD_FLAGS" CFLAGS="$CFLAGS $DEBUG_FLAGS -Wall $_BUILD_FLAGS" diff --git a/src/native/macosx/Makefile.am b/src/native/macosx/Makefile.am index 753ae240..af7ee035 100644 --- a/src/native/macosx/Makefile.am +++ b/src/native/macosx/Makefile.am @@ -4,8 +4,8 @@ libnative_la_SOURCES = $(NATIVE) INCLUDES = -I../common NATIVE = \ -# org_lwjgl_Display.cpp \ -# org_lwjgl_Sys.cpp \ + org_lwjgl_Display.cpp \ + org_lwjgl_Sys.cpp \ # org_lwjgl_input_Controller.cpp \ # org_lwjgl_input_Keyboard.cpp \ # org_lwjgl_input_Mouse.cpp \ diff --git a/src/native/macosx/org_lwjgl_Display.cpp b/src/native/macosx/org_lwjgl_Display.cpp index caa60a24..a888aab6 100644 --- a/src/native/macosx/org_lwjgl_Display.cpp +++ b/src/native/macosx/org_lwjgl_Display.cpp @@ -1,231 +1,63 @@ -/* - * Copyright (c) 2002 Lightweight Java Game Library Project +/* + * 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 + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * 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 + * * 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 + * 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 + * 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. */ -#include "org_lwjgl_Display.h" +/** + * $Id$ + * + * Mac OS X specific library for display handling. + * + * @author elias_naur + * @version $Revision$ + */ + #include -#include -#include +#include "org_lwjgl_Display.h" - -static long _getDictLong (CFDictionaryRef refDict, CFStringRef key) -{ - long int_value; - - CFNumberRef number_value = (CFNumberRef) CFDictionaryGetValue(refDict, key); - - if (!number_value) - { - // if can't get a number for the dictionary - return -1; // fail - } - - if (!CFNumberGetValue(number_value, kCFNumberLongType, &int_value)) - { - // or if cant convert it - return -1; // fail - } - - return int_value; // otherwise return the long value -} - -static double _getDictDouble (CFDictionaryRef refDict, CFStringRef key) -{ - double double_value; - - CFNumberRef number_value = (CFNumberRef) CFDictionaryGetValue(refDict, key); - - if (!number_value) - { - // if can't get a number for the dictionary - return -1; // fail - } - - if (!CFNumberGetValue(number_value, kCFNumberDoubleType, &double_value)) // or if cant convert it - { - return -1; // fail - } - - return double_value; // otherwise return the long value -} - -jobjectArray GetAvailableDisplayModesOSX(JNIEnv * env) -{ - CFIndex i, count; - CFIndex availableModes = 0; - CFArrayRef displayModes = NULL; - int n = 0; - - - displayModes = CGDisplayAvailableModes( kCGDirectMainDisplay ); - count = CFArrayGetCount( displayModes ); - - // get a count of the number of display modes on this machine with a bpp greater than 8 - // - for ( i = 0; i < count; i++ ) - { - CFDictionaryRef mode = static_cast( CFArrayGetValueAtIndex( displayModes, i ) ); - long bpp = _getDictLong( mode, kCGDisplayBitsPerPixel ); - - if ( bpp > 8 ) - { - availableModes ++; - } - } - - // now that we have the count create the classes, and add 'em all - we'll remove dups in Java - // Allocate an array of DisplayModes big enough - jclass displayModeClass = env->FindClass("org/lwjgl/DisplayMode"); - jobjectArray ret = env->NewObjectArray( availableModes, displayModeClass, NULL); - jmethodID displayModeConstructor = env->GetMethodID(displayModeClass, "", "(IIII)V"); - - for ( i = 0; i < count; i++ ) - { - CFDictionaryRef modeDict = static_cast( CFArrayGetValueAtIndex( displayModes, i ) ); - long width = _getDictLong( modeDict, kCGDisplayWidth ); - long height = _getDictLong( modeDict, kCGDisplayHeight ); - long freq = (long)(_getDictDouble( modeDict, kCGDisplayRefreshRate ) + 0.5 ); - long bpp = _getDictLong( modeDict, kCGDisplayBitsPerPixel ); - - if ( bpp > 8 ) - { - jobject displayMode; - displayMode = env->NewObject(displayModeClass, displayModeConstructor, - width, height, - bpp, freq); - - env->SetObjectArrayElement(ret, n++, displayMode); - } - } - - return ret; -} - - - - -/* - * Class: org_lwjgl_Display - * Method: init - * Signature: ()V - */ JNIEXPORT void JNICALL Java_org_lwjgl_Display_init -(JNIEnv * env, jclass clazz) + (JNIEnv * env, jclass clazz) { - if ( CGDisplayCapture( kCGDirectMainDisplay ) != kCGErrorSuccess ) - { - printf("Unable to capture the display. Without capturing the display - this application cannot run"); - return; - } - - //Get the current display mode from the system - // - int width = CGDisplayPixelsWide( kCGDirectMainDisplay ); - int height = CGDisplayPixelsHigh( kCGDirectMainDisplay ); - int bpp = CGDisplayBitsPerPixel( kCGDirectMainDisplay ); - int freq = (int)_getDictDouble (CGDisplayCurrentMode ( kCGDirectMainDisplay ), kCGDisplayRefreshRate); - - jclass jclass_DisplayMode = env->FindClass("org/lwjgl/DisplayMode"); - jmethodID ctor = env->GetMethodID(jclass_DisplayMode, "", "(IIII)V"); - jobject newMode = env->NewObject(jclass_DisplayMode, ctor, width, height, bpp, freq); - jfieldID fid_initialMode = env->GetStaticFieldID(clazz, "mode", "Lorg/lwjgl/DisplayMode;"); - env->SetStaticObjectField(clazz, fid_initialMode, newMode); - env->DeleteLocalRef(newMode); } - -/* - * Class: org_lwjgl_Display - * Method: setDisplayMode - * Signature: (Lorg/lwjgl/DisplayMode;)V - */ -JNIEXPORT void JNICALL Java_org_lwjgl_Display_setDisplayMode -(JNIEnv * env, jclass clazz, jobject mode) -{ - jclass cls_displayMode = env->FindClass("org/lwjgl/DisplayMode"); - jfieldID fid_width = env->GetFieldID(cls_displayMode, "width", "I"); - jfieldID fid_height = env->GetFieldID(cls_displayMode, "height", "I"); - jfieldID fid_bpp = env->GetFieldID(cls_displayMode, "bpp", "I"); - jfieldID fid_freq = env->GetFieldID(cls_displayMode, "freq", "I"); - - int width = env->GetIntField(mode, fid_width); - int height = env->GetIntField(mode, fid_height); - int bpp = env->GetIntField(mode, fid_bpp); - int freq = env->GetIntField(mode, fid_freq); - - CFDictionaryRef displayMode; - displayMode = CGDisplayBestModeForParametersAndRefreshRate( kCGDirectMainDisplay, - bpp, - width, height, - freq, - NULL ); - CGDisplaySwitchToMode( kCGDirectMainDisplay, displayMode ) ; - - // The change was successful but might not be the exact change we were expecting. - // Now we'll construct a new DisplayMode instance and stash it back in the Display - // class's mode instance variable. - - jmethodID ctor = env->GetMethodID(cls_displayMode, "", "(IIII)V"); - jobject newMode = env->NewObject(cls_displayMode, ctor, width, height, bpp, freq); - jfieldID fid_initialMode = env->GetStaticFieldID(clazz, "mode", "Lorg/lwjgl/DisplayMode;"); - env->SetStaticObjectField(clazz, fid_initialMode, newMode); - env->DeleteLocalRef(newMode); -} - -/* - * Class: org_lwjgl_Display - * Method: resetDisplayMode - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_org_lwjgl_Display_resetDisplayMode -(JNIEnv *, jclass) -{ - // the purpose of this method is to return the display mode to whatever it was before - // the application takes over. OSX is smart enough to not require any of this - // foolishness :) - - //release the display that we captured so other applications will still work - // - CGReleaseAllDisplays(); +JNIEXPORT void JNICALL Java_org_lwjgl_Display_setDisplayMode(JNIEnv * env, jclass clazz, jobject mode) { } /* * Class: org_lwjgl_Display * Method: nGetAvailableDisplayModes * Signature: ()[Lorg/lwjgl/DisplayMode; - */ + */ JNIEXPORT jobjectArray JNICALL Java_org_lwjgl_Display_nGetAvailableDisplayModes -(JNIEnv * env, jclass clazz) + (JNIEnv * env, jclass clazz) { - return GetAvailableDisplayModesOSX( env ); } /* @@ -234,34 +66,35 @@ JNIEXPORT jobjectArray JNICALL Java_org_lwjgl_Display_nGetAvailableDisplayModes * Signature: ()I */ JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getPlatform -(JNIEnv * env, jclass clazz) + (JNIEnv * env, jclass clazz) { - return org_lwjgl_Display_PLATFORM_AGL; + return org_lwjgl_Display_PLATFORM_AGL; } /* * Class: org_lwjgl_Display - * Method: getGammaRamp - * Signature: ([I[I[I)Z -*/ -JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_getGammaRamp -(JNIEnv *, jclass, jintArray, jintArray, jintArray) + * Method: getGammaRampLength + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getGammaRampLength + (JNIEnv *env, jclass clazz) { - return false; } /* * Class: org_lwjgl_Display * Method: setGammaRamp - * Signature: ([I[I[I)Z -*/ + * Signature: (I)Z + */ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp -(JNIEnv *, jclass, jintArray, jintArray, jintArray) + (JNIEnv *env, jclass clazz, jobject gamma_ramp_buffer) { - return false; } - - - - +/* + * Class: org_lwjgl_Display + * Method: resetDisplayMode + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_lwjgl_Display_resetDisplayMode(JNIEnv *, jclass) { +} diff --git a/src/native/macosx/org_lwjgl_Sys.cpp b/src/native/macosx/org_lwjgl_Sys.cpp index a7a0f53f..b8ec1c8e 100644 --- a/src/native/macosx/org_lwjgl_Sys.cpp +++ b/src/native/macosx/org_lwjgl_Sys.cpp @@ -48,39 +48,6 @@ long int hires_timer_freq; // Hires timer frequency long int hires_timer_start; // Hires timer start long int hires_timer; // Hires timer current time -/* - * Class: org_lwjgl_Sys - * Method: nGetNULLValue - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_org_lwjgl_Sys_nGetNULLValue -(JNIEnv *, jclass) -{ - return (jint)NULL; -} - -/* - * Class: org_lwjgl_Sys - * Method: getDirectBufferAddress - * Signature: (Ljava/nio/Buffer;)I - */ -JNIEXPORT jint JNICALL Java_org_lwjgl_Sys_getDirectBufferAddress -(JNIEnv * env, jclass clazz, jobject buf) -{ - return (jint) env->GetDirectBufferAddress(buf); -} - -/* - * Class: org_lwjgl_Sys - * Method: createDirectBuffer - * Signature: (II)Ljava/nio/ByteBuffer; - */ -JNIEXPORT jobject JNICALL Java_org_lwjgl_Sys_createDirectBuffer -(JNIEnv * env, jclass clazz, jint address, jint length) -{ - return env->NewDirectByteBuffer((void *)address, length); -} - /* * Class: org_lwjgl_Sys * Method: getTimerResolution @@ -92,7 +59,7 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_getTimerResolution return hires_timer_freq; } -long queryTime(void) { +static long queryTime(void) { struct timeval tv; if (gettimeofday(&tv, NULL) == -1) { #ifdef _DEBUG diff --git a/src/native/macosx/org_lwjgl_opengl_Window.cpp b/src/native/macosx/org_lwjgl_opengl_Window.cpp index 182c41b4..1f5ae761 100644 --- a/src/native/macosx/org_lwjgl_opengl_Window.cpp +++ b/src/native/macosx/org_lwjgl_opengl_Window.cpp @@ -41,6 +41,7 @@ #include #include +#include "org_lwjgl_opengl_Window.h" static WindowRef win_ref;