Win32: Adder createDisplayMode helper function to display.c
This commit is contained in:
parent
cbf850fc5e
commit
7861e281c3
|
@ -48,13 +48,30 @@
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
|
|
||||||
#define GAMMA_SIZE (3*256)
|
#define GAMMA_SIZE 256
|
||||||
|
|
||||||
static bool modeSet = false; // Whether we've done a display mode change
|
static bool modeSet = false; // Whether we've done a display mode change
|
||||||
static WORD originalGamma[GAMMA_SIZE]; // Original gamma settings
|
static WORD originalGamma[3*GAMMA_SIZE]; // Original gamma settings
|
||||||
static WORD currentGamma[GAMMA_SIZE]; // Current gamma settings
|
static WORD currentGamma[3*GAMMA_SIZE]; // Current gamma settings
|
||||||
static DEVMODE devmode; // Now we'll remember this value for the future
|
static DEVMODE devmode; // Now we'll remember this value for the future
|
||||||
|
|
||||||
|
static jobject createDisplayMode(JNIEnv *env, DEVMODE *devmode) {
|
||||||
|
jclass displayModeClass;
|
||||||
|
|
||||||
|
jmethodID displayModeConstructor;
|
||||||
|
|
||||||
|
displayModeClass = (*env)->FindClass(env, "org/lwjgl/opengl/DisplayMode");
|
||||||
|
if (displayModeClass == NULL)
|
||||||
|
return NULL;
|
||||||
|
displayModeConstructor = (*env)->GetMethodID(env, displayModeClass, "<init>", "(IIII)V");
|
||||||
|
if (displayModeConstructor == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (*env)->NewObject(env, displayModeClass, displayModeConstructor,
|
||||||
|
devmode->dmPelsWidth, devmode->dmPelsHeight,
|
||||||
|
devmode->dmBitsPerPel, devmode->dmDisplayFrequency);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Choose displaymodes using extended codepath (multiple displaydevices)
|
* Choose displaymodes using extended codepath (multiple displaydevices)
|
||||||
*/
|
*/
|
||||||
|
@ -62,24 +79,20 @@ jobjectArray getAvailableDisplayModes(JNIEnv * env) {
|
||||||
|
|
||||||
int i = 0, j = 0, n = 0;
|
int i = 0, j = 0, n = 0;
|
||||||
|
|
||||||
DISPLAY_DEVICE DisplayDevice;
|
// DISPLAY_DEVICE DisplayDevice;
|
||||||
DEVMODE DevMode;
|
DEVMODE DevMode;
|
||||||
jobject *display_mode_objects = NULL;
|
jobject *display_mode_objects = NULL;
|
||||||
int list_size = 0;
|
int list_size = 0;
|
||||||
|
|
||||||
jclass displayModeClass;
|
jclass displayModeClass;
|
||||||
|
|
||||||
jobjectArray ret;
|
jobjectArray ret;
|
||||||
jmethodID displayModeConstructor;
|
displayModeClass = (*env)->FindClass(env, "org/lwjgl/opengl/DisplayMode");
|
||||||
|
|
||||||
ZeroMemory(&DevMode, sizeof(DEVMODE));
|
ZeroMemory(&DevMode, sizeof(DEVMODE));
|
||||||
ZeroMemory(&DisplayDevice, sizeof(DISPLAY_DEVICE));
|
// ZeroMemory(&DisplayDevice, sizeof(DISPLAY_DEVICE));
|
||||||
|
|
||||||
DevMode.dmSize = sizeof(DEVMODE);
|
DevMode.dmSize = sizeof(DEVMODE);
|
||||||
DisplayDevice.cb = sizeof(DISPLAY_DEVICE);
|
// DisplayDevice.cb = sizeof(DISPLAY_DEVICE);
|
||||||
|
|
||||||
displayModeClass = (*env)->FindClass(env, "org/lwjgl/opengl/DisplayMode");
|
|
||||||
displayModeConstructor = (*env)->GetMethodID(env, displayModeClass, "<init>", "(IIII)V");
|
|
||||||
|
|
||||||
/* Multi-monitor stuff commented out since we're only really interested in the primary monitor */
|
/* Multi-monitor stuff commented out since we're only really interested in the primary monitor */
|
||||||
/* while(EnumDisplayDevices(NULL, i++, &DisplayDevice, 0) != 0) {
|
/* while(EnumDisplayDevices(NULL, i++, &DisplayDevice, 0) != 0) {
|
||||||
|
@ -100,9 +113,7 @@ jobjectArray getAvailableDisplayModes(JNIEnv * env) {
|
||||||
if (display_mode_objects == NULL)
|
if (display_mode_objects == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
displayMode = (*env)->NewObject(env, displayModeClass, displayModeConstructor,
|
displayMode = createDisplayMode(env, &DevMode);
|
||||||
DevMode.dmPelsWidth, DevMode.dmPelsHeight,
|
|
||||||
DevMode.dmBitsPerPel, DevMode.dmDisplayFrequency);
|
|
||||||
display_mode_objects[n++] = displayMode;
|
display_mode_objects[n++] = displayMode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,7 +171,7 @@ void switchDisplayMode(JNIEnv * env, jobject mode)
|
||||||
|
|
||||||
int getGammaRampLength(void)
|
int getGammaRampLength(void)
|
||||||
{
|
{
|
||||||
return 256;
|
return GAMMA_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setGammaRamp(JNIEnv * env, jobject gammaRampBuffer)
|
void setGammaRamp(JNIEnv * env, jobject gammaRampBuffer)
|
||||||
|
@ -172,12 +183,12 @@ void setGammaRamp(JNIEnv * env, jobject gammaRampBuffer)
|
||||||
const float *gammaRamp = (const float *)(*env)->GetDirectBufferAddress(env, gammaRampBuffer);
|
const float *gammaRamp = (const float *)(*env)->GetDirectBufferAddress(env, gammaRampBuffer);
|
||||||
// Turn array of floats into array of RGB WORDs
|
// Turn array of floats into array of RGB WORDs
|
||||||
|
|
||||||
for (i = 0; i < 256; i ++) {
|
for (i = 0; i < GAMMA_SIZE; i ++) {
|
||||||
scaledRampEntry = gammaRamp[i]*0xffff;
|
scaledRampEntry = gammaRamp[i]*0xffff;
|
||||||
rampEntry = (WORD)scaledRampEntry;
|
rampEntry = (WORD)scaledRampEntry;
|
||||||
currentGamma[i] = rampEntry;
|
currentGamma[i] = rampEntry;
|
||||||
currentGamma[i + 256] = rampEntry;
|
currentGamma[i + GAMMA_SIZE] = rampEntry;
|
||||||
currentGamma[i + 512] = rampEntry;
|
currentGamma[i + 2*GAMMA_SIZE] = rampEntry;
|
||||||
}
|
}
|
||||||
screenDC = GetDC(NULL);
|
screenDC = GetDC(NULL);
|
||||||
if (SetDeviceGammaRamp(screenDC, currentGamma) == FALSE) {
|
if (SetDeviceGammaRamp(screenDC, currentGamma) == FALSE) {
|
||||||
|
@ -219,7 +230,7 @@ jobject initDisplay(JNIEnv * env)
|
||||||
if (GetDeviceGammaRamp(screenDC, originalGamma) == FALSE) {
|
if (GetDeviceGammaRamp(screenDC, originalGamma) == FALSE) {
|
||||||
printfDebugJava(env, "Failed to get initial device gamma");
|
printfDebugJava(env, "Failed to get initial device gamma");
|
||||||
}
|
}
|
||||||
memcpy(currentGamma, originalGamma, sizeof(WORD)*GAMMA_SIZE);
|
memcpy(currentGamma, originalGamma, sizeof(WORD)*3*GAMMA_SIZE);
|
||||||
ReleaseDC(NULL, screenDC);
|
ReleaseDC(NULL, screenDC);
|
||||||
return newMode;
|
return newMode;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue