*** empty log message ***

This commit is contained in:
Elias Naur 2003-10-22 18:34:42 +00:00
parent d61172410c
commit 8cabcd523f
6 changed files with 54 additions and 64 deletions

View File

@ -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",

View File

@ -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();

View File

@ -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
}

View File

@ -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

View File

@ -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) {

View File

@ -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;
}