From 8cabcd523f35106471436a8fef19d41497502005 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 22 Oct 2003 18:34:42 +0000 Subject: [PATCH] *** empty log message *** --- src/java/org/lwjgl/Display.java | 13 +++--- .../lwjgl/test/DisplayConfigurationTest.java | 4 +- src/native/common/org_lwjgl_Display.h | 10 ++-- src/native/linux/org_lwjgl_Display.cpp | 46 ++++--------------- src/native/macosx/org_lwjgl_Display.cpp | 30 ++++++++++-- src/native/win32/org_lwjgl_Display.cpp | 15 ++---- 6 files changed, 54 insertions(+), 64 deletions(-) diff --git a/src/java/org/lwjgl/Display.java b/src/java/org/lwjgl/Display.java index 45757e1b..7fbd262f 100644 --- a/src/java/org/lwjgl/Display.java +++ b/src/java/org/lwjgl/Display.java @@ -215,12 +215,13 @@ public final class Display { * @param contrast The contrast, larger than 0.0. * @return true if the call succeeded, false otherwise */ - public static boolean setDisplayConfiguration(float gamma, float brightness, float contrast) { + public static void setDisplayConfiguration(float gamma, float brightness, float contrast) throws Exception { assert brightness >= -1.0f && brightness <= 1.0f; assert contrast >= 0.0f; int rampSize = getGammaRampLength(); - if (rampSize == 0) - return false; + if (rampSize == 0) { + throw new Exception("Display configuration not supported"); + } FloatBuffer gammaRamp = ByteBuffer.allocateDirect(rampSize*4).order(ByteOrder.nativeOrder()).asFloatBuffer(); for (int i = 0; i < rampSize; i++) { float intensity = (float)i/(rampSize - 1); @@ -237,12 +238,10 @@ public final class Display { rampEntry = 0.0f; gammaRamp.put(i, rampEntry); } - if (!setGammaRamp(gammaRamp)) - return false; + setGammaRamp(gammaRamp); if (Sys.DEBUG) { System.out.println("Gamma set, gamma = " + gamma + ", brightness = " + brightness + ", contrast = " + contrast); } - return true; } /** @@ -256,7 +255,7 @@ public final class Display { /** * Native method to set the gamma ramp. */ - private static native boolean setGammaRamp(FloatBuffer gammaRamp); + private static native void setGammaRamp(FloatBuffer gammaRamp) throws Exception ; /** * Get the driver adapter string. This is a unique string describing the actual card's hardware, eg. "Geforce2", "PS2", diff --git a/src/java/org/lwjgl/test/DisplayConfigurationTest.java b/src/java/org/lwjgl/test/DisplayConfigurationTest.java index ae94603f..fd842306 100644 --- a/src/java/org/lwjgl/test/DisplayConfigurationTest.java +++ b/src/java/org/lwjgl/test/DisplayConfigurationTest.java @@ -13,9 +13,9 @@ import org.lwjgl.*; */ public class DisplayConfigurationTest { private static void changeConfig(float gamma, float brightness, float contrast) { - Display.setDisplayConfiguration(gamma, brightness, contrast); - System.out.println("Configuration changed, gamma = " + gamma + " brightness = " + brightness + " contrast = " + contrast); try { + Display.setDisplayConfiguration(gamma, brightness, contrast); + System.out.println("Configuration changed, gamma = " + gamma + " brightness = " + brightness + " contrast = " + contrast); Thread.sleep(3000); } catch (Exception e) { e.printStackTrace(); diff --git a/src/native/common/org_lwjgl_Display.h b/src/native/common/org_lwjgl_Display.h index 8d5853c0..b657d474 100644 --- a/src/native/common/org_lwjgl_Display.h +++ b/src/native/common/org_lwjgl_Display.h @@ -70,24 +70,26 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getGammaRampLength /* * Class: org_lwjgl_Display * Method: setGammaRamp - * Signature: (Ljava/nio/FloatBuffer;)Z + * Signature: (Ljava/nio/FloatBuffer;)V */ -JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp +JNIEXPORT void JNICALL Java_org_lwjgl_Display_setGammaRamp (JNIEnv *, jclass, jobject); /* * Class: org_lwjgl_Display * Method: getAdapter + * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_lwjgl_Display_getAdapter - (JNIEnv * , jclass); + (JNIEnv *, jclass); /* * Class: org_lwjgl_Display * Method: getVersion + * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_lwjgl_Display_getVersion - (JNIEnv * , jclass); + (JNIEnv *, jclass); #ifdef __cplusplus } diff --git a/src/native/linux/org_lwjgl_Display.cpp b/src/native/linux/org_lwjgl_Display.cpp index b650b3bc..72828e18 100644 --- a/src/native/linux/org_lwjgl_Display.cpp +++ b/src/native/linux/org_lwjgl_Display.cpp @@ -276,44 +276,23 @@ JNIEXPORT jobjectArray JNICALL Java_org_lwjgl_Display_nGetAvailableDisplayModes return ret; } -/* - * Class: org_lwjgl_Display - * Method: getPlatform - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getPlatform - (JNIEnv * env, jclass clazz) -{ +JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getPlatform(JNIEnv * env, jclass clazz) { return org_lwjgl_Display_PLATFORM_GLX; } -/* - * Class: org_lwjgl_Display - * Method: getGammaRampLength - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getGammaRampLength - (JNIEnv *env, jclass clazz) -{ +JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getGammaRampLength(JNIEnv *env, jclass clazz) { return gamma_ramp_length; } -/* - * Class: org_lwjgl_Display - * Method: setGammaRamp - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp - (JNIEnv *env, jclass clazz, jobject gamma_ramp_buffer) -{ - if (gamma_ramp_length == 0) - return JNI_FALSE; +JNIEXPORT void JNICALL Java_org_lwjgl_Display_setGammaRamp(JNIEnv *env, jclass clazz, jobject gamma_ramp_buffer) { + if (gamma_ramp_length == 0) { + throwException(env, "gamma ramp length == 0."); + return; + } Display * disp = XOpenDisplay(NULL); if (disp == NULL) { -#ifdef _DEBUG - printf("Could not open X connection\n"); -#endif - return JNI_FALSE; + throwException(env, "Could not open X connection."); + return; } int screen = DefaultScreen(disp); const float *gamma_ramp = (const float *)env->GetDirectBufferAddress(gamma_ramp_buffer); @@ -324,14 +303,9 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp ramp[i] = (unsigned short)round(scaled_gamma); } if (XF86VidModeSetGammaRamp(disp, screen, gamma_ramp_length, ramp, ramp, ramp) == False) { -#ifdef _DEBUG - printf("Could not set gamma ramp\n"); -#endif - XCloseDisplay(disp); - return JNI_FALSE; + throwException(env, "Could not set gamma ramp."); } XCloseDisplay(disp); - return JNI_TRUE; } JNIEXPORT jstring JNICALL Java_org_lwjgl_Display_getAdapter diff --git a/src/native/macosx/org_lwjgl_Display.cpp b/src/native/macosx/org_lwjgl_Display.cpp index ea905868..662f0125 100644 --- a/src/native/macosx/org_lwjgl_Display.cpp +++ b/src/native/macosx/org_lwjgl_Display.cpp @@ -44,8 +44,11 @@ #include "common_tools.h" #include "tools.h" +#define GAMMARAMP_LENGTH 256 + static CFDictionaryRef original_mode; static bool initialized = false; +static bool display_captured = false; static void saveMode(JNIEnv *env, long width, long height, long bpp, long freq) { jclass display_class = env->FindClass("org/lwjgl/Display"); @@ -76,9 +79,23 @@ static void init(JNIEnv *env) { } } +static void captureDisplay(void) { + if (!display_captured) { + display_captured = true; + CGDisplayCapture(kCGDirectMainDisplay); + } +} + +static void releaseDisplay(void) { + if (display_captured) { + display_captured = false; + CGDisplayRelease(kCGDirectMainDisplay); + } +} + void switchMode(JNIEnv *env, long width, long height, long bpp, long freq) { init(env); - CGDisplayCapture(kCGDirectMainDisplay); + captureDisplay(); CFDictionaryRef displayMode = CGDisplayBestModeForParametersAndRefreshRate(kCGDirectMainDisplay, bpp, width, height, freq, NULL); CGDisplaySwitchToMode(kCGDirectMainDisplay, displayMode); saveMode(env, width, height, bpp, freq); @@ -86,8 +103,9 @@ void switchMode(JNIEnv *env, long width, long height, long bpp, long freq) { void resetMode(JNIEnv *env) { init(env); + CGDisplayRestoreColorSyncSettings(); CGDisplaySwitchToMode(kCGDirectMainDisplay, original_mode); - CGDisplayRelease(kCGDirectMainDisplay); + releaseDisplay(); saveOriginalMode(env); } @@ -146,9 +164,15 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getPlatform(JNIEnv * env, jclass c } JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getGammaRampLength(JNIEnv *env, jclass clazz) { + return GAMMARAMP_LENGTH; } -JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp(JNIEnv *env, jclass clazz, jobject gamma_ramp_buffer) { +JNIEXPORT void JNICALL Java_org_lwjgl_Display_setGammaRamp(JNIEnv *env, jclass clazz, jobject gamma_ramp_buffer) { + const float *gamma_ramp = (const float *)env->GetDirectBufferAddress(gamma_ramp_buffer); + CGDisplayErr err = CGSetDisplayTransferByTable(kCGDirectMainDisplay, GAMMARAMP_LENGTH, gamma_ramp, gamma_ramp, gamma_ramp); + if (err) { + throwException(env, "Could not set gamma."); + } } JNIEXPORT void JNICALL Java_org_lwjgl_Display_resetDisplayMode(JNIEnv *env, jclass clazz) { diff --git a/src/native/win32/org_lwjgl_Display.cpp b/src/native/win32/org_lwjgl_Display.cpp index 6f727384..2fcde374 100644 --- a/src/native/win32/org_lwjgl_Display.cpp +++ b/src/native/win32/org_lwjgl_Display.cpp @@ -391,7 +391,7 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_Display_getGammaRampLength * Method: setGammaRamp * Signature: (I)Z */ -JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp +JNIEXPORT void JNICALL Java_org_lwjgl_Display_setGammaRamp (JNIEnv * env, jclass clazz, jobject gammaRampBuffer) { const float *gammaRamp = (const float *)env->GetDirectBufferAddress(gammaRampBuffer); @@ -404,24 +404,15 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_setGammaRamp currentGamma[i + 256] = rampEntry; currentGamma[i + 512] = rampEntry; } - jboolean ret; HDC screenDC = GetDC(NULL); try { if (SetDeviceGammaRamp(screenDC, currentGamma) == FALSE) { - #ifdef _DEBUG - printf("Failed to set device gamma\n"); - #endif - ret = JNI_FALSE; - } else { - ret = JNI_TRUE; + throwException(env, "Failed to set device gamma.") } } catch (...) { - printf("Exception occurred in SetDeviceGammaRamp\n"); - ret = JNI_FALSE; + throwException(env, "Exception occurred in SetDeviceGammaRamp.") } ReleaseDC(NULL, screenDC); - - return ret; }