Buffering added

This commit is contained in:
Caspian Rychlik-Prince 2002-08-24 21:14:40 +00:00
parent a60f255e82
commit 78dc61358e
3 changed files with 162 additions and 2 deletions

View File

@ -167,7 +167,8 @@ public class GamePad {
private static native void nPoll(int keyDownBufferAddress);
/**
* Reads the gamepad buffer.
* Reads the gamepad buffer. Call next() to read the events one by one.
* @see #next()
*/
public static void read() {
assert created : "The gamepad has not been created.";

View File

@ -32,6 +32,8 @@
package org.lwjgl.input;
import java.nio.ByteBuffer;
import org.lwjgl.Display;
import org.lwjgl.Sys;
@ -71,6 +73,20 @@ public class Joystick {
/** Z position, range 0.0f to 1.0f */
public static float z;
/**
* The joystick events from the last read: a sequence of Events
*/
private static ByteBuffer readBuffer;
/** Address of the read buffer */
private static int readBufferAddress;
/** The size in bytes of a single joystick event */
private static final int JOYSTICK_EVENT_SIZE = 20;
/** The stride in bytes of a single joystick event */
private static final int JOYSTICK_EVENT_STRIDE = 32;
/**
* Joystick cannot be constructed.
*/
@ -166,4 +182,66 @@ public class Joystick {
* Native implementation of hasZValue()
*/
private static native boolean nHasZValue();
/**
* Enable joystick buffering. Must be called after the joystick is created.
* @return the size of the joystick buffer in events, or 0 if no buffering
* can be enabled for any reason
*/
public static int enableBuffer() {
assert created : "The joystick has not been created.";
return nEnableBuffer();
}
/**
* Native method to read the joystick buffer
*
* @param readBufferAddress the address of the joystick buffer
* @return the number of joystick events read
*/
private static native int nRead(int readBufferAddress);
/**
* Reads the joystick buffer.
*/
public static void read() {
assert created : "The joystick has not been created.";
assert readBuffer != null : "Joystick buffering has not been enabled.";
readBuffer.clear();
readBuffer.limit(nRead(readBufferAddress) << 1);
}
/**
* Native method to enable the buffer
* @return the size of the buffer allocated, in events (1 event is 2 bytes),
* or 0 if no buffer can be allocated
*/
private static native int nEnableBuffer();
/**
* Gets the next joystick event. This returns its results as if a poll() had
* been called.
*
* @return true if a joystick event was read, false otherwise
*/
public static boolean next() {
assert created : "The joystick has not been created.";
assert readBuffer != null : "Joystick buffering has not been enabled.";
if (readBuffer.hasRemaining()) {
x = readBuffer.getFloat();
y = readBuffer.getFloat();
z = readBuffer.getFloat();
for (int i = 0; i < button.length; i ++)
button[i] = readBuffer.get() != (byte)0;
readBuffer.position(readBuffer.position() + (JOYSTICK_EVENT_STRIDE - JOYSTICK_EVENT_SIZE));
return true;
} else
return false;
}
}

View File

@ -32,6 +32,8 @@
package org.lwjgl.input;
import java.nio.ByteBuffer;
import org.lwjgl.Display;
import org.lwjgl.Sys;
@ -40,7 +42,6 @@ import org.lwjgl.Sys;
*
* A raw Mouse interface. This can be used to poll the current state of the
* mouse buttons, and determine the mouse movement delta since the last poll.
* No buffering is available.
*
* Up to 8 buttons are available. A scrolly wheel, if present, is the z
* value. This will be in the range of -10000 to +10000.
@ -69,6 +70,21 @@ public class Mouse {
/** Delta Z */
public static int dz;
/**
* The mouse events from the last read: a sequence of Events
*/
private static ByteBuffer readBuffer;
/** Address of the read buffer */
private static int readBufferAddress;
/** The size in bytes of a single mouse event */
private static final int MOUSE_EVENT_SIZE = 20;
/** The stride in bytes of a single mouse event */
private static final int MOUSE_EVENT_STRIDE = 32;
/**
* Mouse cannot be constructed.
*/
@ -164,4 +180,69 @@ public class Mouse {
* Native implementation of hasZValue()
*/
private static native boolean nHasZValue();
/**
* Enable mouse buffering. Must be called after the mouse is created.
* @return the size of the mouse buffer in events, or 0 if no buffering
* can be enabled for any reason
*/
public static int enableBuffer() {
assert created : "The mouse has not been created.";
return nEnableBuffer();
}
/**
* Native method to enable the buffer
* @return the size of the buffer allocated, in events (1 event is 2 bytes),
* or 0 if no buffer can be allocated
*/
private static native int nEnableBuffer();
/**
* Gets the next mouse event. This returns its results as if a poll() had
* been called.
*
* @return true if a mouse event was read, false otherwise
*/
public static boolean next() {
assert created : "The mouse has not been created.";
assert readBuffer != null : "Mouse buffering has not been enabled.";
if (readBuffer.hasRemaining()) {
dx = readBuffer.getInt();
dy = readBuffer.getInt();
dz = readBuffer.getInt();
for (int i = 0; i < button.length; i ++)
button[i] = readBuffer.get() != (byte)0;
readBuffer.position(readBuffer.position() + (MOUSE_EVENT_STRIDE - MOUSE_EVENT_SIZE));
return true;
} else
return false;
}
/**
* Native method to read the gamepad buffer
*
* @param readBufferAddress the address of the mouse buffer
* @return the number of mouse events read
*/
private static native int nRead(int readBufferAddress);
/**
* Reads the mouse buffer.
*/
public static void read() {
assert created : "The mouse has not been created.";
assert readBuffer != null : "Mouse buffering has not been enabled.";
readBuffer.clear();
readBuffer.limit(nRead(readBufferAddress) * MOUSE_EVENT_SIZE);
}
}