*** empty log message ***
This commit is contained in:
parent
d61172410c
commit
8cabcd523f
|
@ -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",
|
||||
|
|
|
@ -13,9 +13,9 @@ import org.lwjgl.*;
|
|||
*/
|
||||
public class DisplayConfigurationTest {
|
||||
private static void changeConfig(float gamma, float brightness, float contrast) {
|
||||
try {
|
||||
Display.setDisplayConfiguration(gamma, brightness, contrast);
|
||||
System.out.println("Configuration changed, gamma = " + gamma + " brightness = " + brightness + " contrast = " + contrast);
|
||||
try {
|
||||
Thread.sleep(3000);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue