*** empty log message ***
This commit is contained in:
parent
1ba24e9bdf
commit
38c18eb35c
|
@ -7,7 +7,7 @@ NATIVE = \
|
|||
org_lwjgl_Display.cpp \
|
||||
org_lwjgl_Sys.cpp \
|
||||
# org_lwjgl_input_Controller.cpp \
|
||||
# org_lwjgl_input_Keyboard.cpp \
|
||||
org_lwjgl_input_Keyboard.cpp \
|
||||
# org_lwjgl_input_Mouse.cpp \
|
||||
# org_lwjgl_input_Cursor.cpp \
|
||||
org_lwjgl_opengl_Window.cpp
|
||||
|
|
|
@ -39,6 +39,11 @@
|
|||
* @version $Revision$
|
||||
*/
|
||||
|
||||
#include <IOKit/IOKitLib.h>
|
||||
#include <IOKit/hid/IOHIDKeys.h>
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <stdlib.h>
|
||||
#include "tools.h"
|
||||
#include "org_lwjgl_input_Keyboard.h"
|
||||
|
||||
#define KEYBOARD_BUFFER_SIZE 50
|
||||
|
@ -55,6 +60,36 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs
|
|||
{
|
||||
}
|
||||
|
||||
static void printCFString(CFStringRef str) {
|
||||
CFIndex buffer_size = CFStringGetLength(str) + 1;
|
||||
char * buffer = (char *)malloc(buffer_size);
|
||||
if (buffer != NULL) {
|
||||
if (CFStringGetCString(str, buffer, buffer_size, CFStringGetSystemEncoding()))
|
||||
printf("%s", buffer);
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
static void printCFNumber(CFNumberRef num) {
|
||||
long number;
|
||||
|
||||
if (CFNumberGetValue(num, kCFNumberLongType, &number))
|
||||
printf("0x%lx (%ld)", number, number);
|
||||
}
|
||||
|
||||
static void printProperty(CFDictionaryRef dict, CFStringRef key) {
|
||||
CFTypeRef val = CFDictionaryGetValue(dict, key);
|
||||
if (val != NULL) {
|
||||
CFTypeID type = CFGetTypeID(val);
|
||||
if (type == CFArrayGetTypeID()) printf("array\n");
|
||||
else if (type == CFBooleanGetTypeID()) printf("boolean\n");
|
||||
else if (type == CFDictionaryGetTypeID()) printf("dictionary\n");
|
||||
else if (type == CFNumberGetTypeID()) printCFNumber((CFNumberRef)val);
|
||||
else if (type == CFStringGetTypeID()) printCFString((CFStringRef)val);
|
||||
else printf("<unknown object type>\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_input_Keyboard
|
||||
* Method: nCreate
|
||||
|
@ -63,6 +98,31 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs
|
|||
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate
|
||||
(JNIEnv * env, jclass clazz)
|
||||
{
|
||||
io_iterator_t device_iterator;
|
||||
io_object_t hid_device;
|
||||
kern_return_t kern_err;
|
||||
CFMutableDictionaryRef dev_props;
|
||||
CFMutableDictionaryRef matching_dic = IOServiceMatching(kIOHIDDeviceKey);
|
||||
IOReturn err = IOServiceGetMatchingServices(kIOMasterPortDefault, matching_dic, &device_iterator);
|
||||
if (err != kIOReturnSuccess) {
|
||||
throwException(env, "Could not find matching devices");
|
||||
return;
|
||||
}
|
||||
while ((hid_device = IOIteratorNext(device_iterator)) != NULL) {
|
||||
kern_err = IORegistryEntryCreateCFProperties(hid_device, &dev_props, kCFAllocatorDefault, kNilOptions);
|
||||
IOObjectRelease(hid_device);
|
||||
if (kern_err == KERN_SUCCESS && dev_props != NULL) {
|
||||
printf("Device found: ");
|
||||
printProperty(dev_props, CFSTR(kIOHIDProductKey));
|
||||
printf(" usage ");
|
||||
printProperty(dev_props, CFSTR(kIOHIDPrimaryUsageKey));
|
||||
printf(" usage page ");
|
||||
printProperty(dev_props, CFSTR(kIOHIDPrimaryUsagePageKey));
|
||||
printf("\n");
|
||||
CFRelease(dev_props);
|
||||
}
|
||||
}
|
||||
IOObjectRelease(device_iterator);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -90,16 +150,17 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nPoll
|
|||
* Method: nRead
|
||||
* Signature: (I)V
|
||||
*/
|
||||
JNIEXPORT int JNICALL Java_org_lwjgl_input_Keyboard_nRead
|
||||
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead
|
||||
(JNIEnv * env, jclass clazz)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_input_Keyboard
|
||||
* Method: nEnableTranslation
|
||||
* Signature: ()I
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation
|
||||
(JNIEnv *env, jclass clazz)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -1,154 +0,0 @@
|
|||
/*
|
||||
* 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
|
||||
* met:
|
||||
*
|
||||
* * 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
|
||||
* 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
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* Base OSX functionality for GL.
|
||||
*
|
||||
* @author Gregory Pierce <me@gregorypierce.com>
|
||||
* @version $Revision$
|
||||
*/
|
||||
|
||||
#include "extgl.h"
|
||||
#include "org_lwjgl_opengl_BaseGL.h"
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
#include <OpenGL/OpenGL.h>
|
||||
|
||||
|
||||
static CGLContextObj contextObj;
|
||||
static CGDirectDisplayID displayID = kCGDirectMainDisplay;
|
||||
|
||||
/*
|
||||
* Utility function to throw an Exception
|
||||
*/
|
||||
void throwException(JNIEnv * env, const char * err)
|
||||
{
|
||||
jclass cls = env->FindClass("java/lang/Exception");
|
||||
env->ThrowNew(cls, err);
|
||||
env->DeleteLocalRef(cls);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_BaseGL
|
||||
* Method: nCreate
|
||||
* Signature: (Ljava/lang/String;IIIIIIIIZ)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nCreate
|
||||
(JNIEnv * env, jobject obj, jstring title, jint x, jint y, jint width, jint height, jint bpp, jint alpha, jint depth, jint stencil, jboolean fullscreen)
|
||||
{
|
||||
CGLPixelFormatObj pixelFormatObj;
|
||||
long numPixelFormats;
|
||||
CFDictionaryRef displayMode;
|
||||
|
||||
if( extgl_Open() != 0 )
|
||||
{
|
||||
throwException( env, "Could not load gl libs" );
|
||||
return;
|
||||
}
|
||||
displayMode = CGDisplayBestModeForParametersAndRefreshRate( displayID,
|
||||
bpp,
|
||||
width, height,
|
||||
60,
|
||||
NULL );
|
||||
|
||||
CGDisplaySwitchToMode( displayID, displayMode );
|
||||
|
||||
CGOpenGLDisplayMask displayMask = CGDisplayIDToOpenGLDisplayMask( kCGDirectMainDisplay ) ;
|
||||
CGLPixelFormatAttribute attribs[] =
|
||||
{
|
||||
kCGLPFAFullScreen,
|
||||
kCGLPFADoubleBuffer,
|
||||
kCGLPFADisplayMask,
|
||||
displayMask,
|
||||
NULL
|
||||
} ;
|
||||
long swapInterval;
|
||||
|
||||
CGLChoosePixelFormat( attribs, &pixelFormatObj, &numPixelFormats );
|
||||
if ( pixelFormatObj != NULL )
|
||||
{
|
||||
CGLCreateContext( pixelFormatObj, NULL, &contextObj );
|
||||
CGLDestroyPixelFormat( pixelFormatObj );
|
||||
|
||||
swapInterval = 1;
|
||||
CGLSetParameter( contextObj, kCGLCPSwapInterval, &swapInterval );
|
||||
CGLSetCurrentContext( contextObj );
|
||||
CGLSetFullScreen( contextObj );
|
||||
if (extgl_Initialize() != 0)
|
||||
{
|
||||
// TODO: destroy stuff created this far
|
||||
throwException( env, "Could not init gl function pointers\n");
|
||||
CGLSetCurrentContext( NULL );
|
||||
CGLClearDrawable( contextObj );
|
||||
CGLDestroyContext( contextObj );
|
||||
contextObj = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throwException( env, "Failed to choose pixel format\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_BaseGL
|
||||
* Method: nDestroyGL
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nDestroyGL
|
||||
(JNIEnv * env, jobject obj)
|
||||
{
|
||||
if ( contextObj != NULL )
|
||||
{
|
||||
CGLSetCurrentContext( NULL );
|
||||
CGLClearDrawable( contextObj );
|
||||
CGLDestroyContext( contextObj );
|
||||
|
||||
contextObj = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_lwjgl_opengl_BaseGL
|
||||
* Method: swapBuffers
|
||||
* Signature: ()V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_swapBuffers
|
||||
(JNIEnv *, jobject)
|
||||
{
|
||||
CGLFlushDrawable( contextObj );
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -40,24 +40,14 @@
|
|||
*/
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <JavaVM/jni.h>
|
||||
#include "org_lwjgl_opengl_Window.h"
|
||||
#include "extgl.h"
|
||||
#include "tools.h"
|
||||
|
||||
static WindowRef win_ref;
|
||||
static AGLContext context;
|
||||
static bool close_requested;
|
||||
|
||||
/*
|
||||
* Utility function to throw an Exception
|
||||
*/
|
||||
static void throwException(JNIEnv * env, const char * err)
|
||||
{
|
||||
jclass cls = env->FindClass("java/lang/Exception");
|
||||
env->ThrowNew(cls, err);
|
||||
env->DeleteLocalRef(cls);
|
||||
}
|
||||
|
||||
static void setWindowTitle(JNIEnv *env, jstring title_obj) {
|
||||
const char* title = env->GetStringUTFChars(title_obj, NULL);
|
||||
CFStringRef cf_title = CFStringCreateWithCString(NULL, title, kCFStringEncodingUTF8);
|
||||
|
@ -184,7 +174,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Window_nCreate(JNIEnv *env, jclass
|
|||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Window_update
|
||||
(JNIEnv *env, jclass clazz)
|
||||
{
|
||||
RunApplicationEventLoop();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Window_swapBuffers(JNIEnv * env, jclass clazz)
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#include "tools.h"
|
||||
|
||||
void throwException(JNIEnv* env, const char* msg) {
|
||||
jclass cls = env->FindClass("java/lang/Exception");
|
||||
env->ThrowNew(cls, err);
|
||||
env->DeleteLocalRef(cls);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef TOOLS_H
|
||||
#define TOOLS_H
|
||||
|
||||
#include <JavaVM/jni.h>
|
||||
|
||||
void throwException(JNIEnv* env, const char* msg);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue