First commit of Direct3D extension.
This commit is contained in:
parent
ed3261718f
commit
9182e5b3ae
|
@ -0,0 +1,107 @@
|
||||||
|
package org.lwjgl.test.d3d;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.d3d.D3DPresentParameters;
|
||||||
|
import org.lwjgl.d3d.Direct3DConstants;
|
||||||
|
import org.lwjgl.d3d.Display;
|
||||||
|
import org.lwjgl.d3d.DisplayMode;
|
||||||
|
import org.lwjgl.d3d.IDirect3D9;
|
||||||
|
import org.lwjgl.d3d.IDirect3DDevice9;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class DrunkenHyenaLines {
|
||||||
|
private static final int STRUCTURE_SIZE = 20;
|
||||||
|
private static final int WIDTH = 640;
|
||||||
|
private static final int HEIGHT = 480;
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
DisplayMode[] modes = Display.getAvailableDisplayModes();
|
||||||
|
for (int i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].getWidth() == 640 && modes[i].getHeight() == 480 && modes[i].getBitsPerPixel() >= 32 && modes[i].getFrequency() <= 75) {
|
||||||
|
try {
|
||||||
|
Display.setDisplayMode(modes[i]);
|
||||||
|
} catch (LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Display.create();
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
IDirect3D9 iDirect3D9 = IDirect3D9.create();
|
||||||
|
|
||||||
|
D3DPresentParameters params = new D3DPresentParameters();
|
||||||
|
params.Windowed = true;
|
||||||
|
params.BackBufferCount = 1;
|
||||||
|
params.SwapEffect = Direct3DConstants.D3DSWAPEFFECT_FLIP;
|
||||||
|
params.BackBufferFormat = Direct3DConstants.D3DFMT_UNKNOWN;
|
||||||
|
IDirect3DDevice9 iDirect3DDevice9 = new IDirect3DDevice9();
|
||||||
|
|
||||||
|
iDirect3D9.createDevice(Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DDEVTYPE_HAL,
|
||||||
|
Display.getHwnd(), Direct3DConstants.D3DCREATE_SOFTWARE_VERTEXPROCESSING, params,
|
||||||
|
iDirect3DDevice9);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Keyboard.create();
|
||||||
|
}
|
||||||
|
catch(LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteBuffer sineData = ByteBuffer.allocateDirect(WIDTH * STRUCTURE_SIZE);
|
||||||
|
sineData.order(ByteOrder.nativeOrder());
|
||||||
|
for(int i=0;i<WIDTH;i++) {
|
||||||
|
sineData.putFloat(i);
|
||||||
|
float y = (float)Math.sin(i / 10.0f);
|
||||||
|
sineData.putFloat(y * (HEIGHT / 4.0f) + (HEIGHT / 2.0f));
|
||||||
|
sineData.putFloat(1.0f);
|
||||||
|
sineData.putFloat(1.0f);
|
||||||
|
int blue = ((int)(Math.ceil(((float)i / (float)WIDTH) * 200.0f) + 55)) & 0x000000ff;
|
||||||
|
int green = ((int)(Math.ceil((((float)WIDTH - (float)i) / (float)WIDTH) * 200.0f) + 55)) & 0x000000ff;
|
||||||
|
int red = ((int)(Math.ceil(Math.abs(y) * 200.0f) + 55.0f)) & 0x000000ff;
|
||||||
|
sineData.putInt((red << 16) | (green << 8) | blue);
|
||||||
|
|
||||||
|
}
|
||||||
|
ByteBuffer randomData = ByteBuffer.allocateDirect(WIDTH * STRUCTURE_SIZE);
|
||||||
|
randomData.order(ByteOrder.nativeOrder());
|
||||||
|
Random random = new Random(System.currentTimeMillis());
|
||||||
|
for(int i=0;i<WIDTH;i++) {
|
||||||
|
randomData.putFloat(random.nextFloat() * WIDTH);
|
||||||
|
randomData.putFloat(random.nextFloat() * HEIGHT);
|
||||||
|
randomData.putFloat(1.0f);
|
||||||
|
randomData.putFloat(1.0f);
|
||||||
|
randomData.putInt((random.nextInt(255) << 16) | (random.nextInt(255) << 8) | random.nextInt(255));
|
||||||
|
}
|
||||||
|
int primitiveType = Direct3DConstants.D3DPT_LINELIST;
|
||||||
|
int size = WIDTH / 2;
|
||||||
|
ByteBuffer data = randomData;
|
||||||
|
while(Keyboard.getEventKey() != Keyboard.KEY_ESCAPE || Display.isCloseRequested()) {
|
||||||
|
iDirect3DDevice9.beginScene();
|
||||||
|
iDirect3DDevice9.clear(0, null, Direct3DConstants.D3DCLEAR_TARGET, 0, 1.0f, 0);
|
||||||
|
iDirect3DDevice9.setFVF(Direct3DConstants.D3DFVF_XYZRHW | Direct3DConstants.D3DFVF_DIFFUSE);
|
||||||
|
iDirect3DDevice9.drawPrimitiveUP(primitiveType, size, data, STRUCTURE_SIZE);
|
||||||
|
iDirect3DDevice9.endScene();
|
||||||
|
iDirect3DDevice9.present(null, null, 0, null);
|
||||||
|
Display.update();
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
catch(Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
iDirect3DDevice9.release();
|
||||||
|
iDirect3D9.release();
|
||||||
|
Display.destroy();
|
||||||
|
}
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new DrunkenHyenaLines().run();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
package org.lwjgl.test.d3d;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.d3d.D3DPresentParameters;
|
||||||
|
import org.lwjgl.d3d.Direct3DConstants;
|
||||||
|
import org.lwjgl.d3d.Display;
|
||||||
|
import org.lwjgl.d3d.DisplayMode;
|
||||||
|
import org.lwjgl.d3d.IDirect3D9;
|
||||||
|
import org.lwjgl.d3d.IDirect3DDevice9;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class DrunkenHyenaPoints {
|
||||||
|
private static final int STRUCTURE_SIZE = 20;
|
||||||
|
private static final int WIDTH = 640;
|
||||||
|
private static final int HEIGHT = 480;
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
DisplayMode[] modes = Display.getAvailableDisplayModes();
|
||||||
|
for (int i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].getWidth() == 640 && modes[i].getHeight() == 480 && modes[i].getBitsPerPixel() >= 32 && modes[i].getFrequency() <= 75) {
|
||||||
|
try {
|
||||||
|
Display.setDisplayMode(modes[i]);
|
||||||
|
} catch (LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Display.create();
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
IDirect3D9 iDirect3D9 = IDirect3D9.create();
|
||||||
|
|
||||||
|
D3DPresentParameters params = new D3DPresentParameters();
|
||||||
|
params.Windowed = true;
|
||||||
|
params.BackBufferCount = 1;
|
||||||
|
params.SwapEffect = Direct3DConstants.D3DSWAPEFFECT_FLIP;
|
||||||
|
params.BackBufferFormat = Direct3DConstants.D3DFMT_UNKNOWN;
|
||||||
|
IDirect3DDevice9 iDirect3DDevice9 = new IDirect3DDevice9();
|
||||||
|
|
||||||
|
iDirect3D9.createDevice(Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DDEVTYPE_HAL,
|
||||||
|
Display.getHwnd(), Direct3DConstants.D3DCREATE_SOFTWARE_VERTEXPROCESSING, params,
|
||||||
|
iDirect3DDevice9);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Keyboard.create();
|
||||||
|
}
|
||||||
|
catch(LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteBuffer sineData = ByteBuffer.allocateDirect(WIDTH * STRUCTURE_SIZE);
|
||||||
|
sineData.order(ByteOrder.nativeOrder());
|
||||||
|
for(int i=0;i<WIDTH;i++) {
|
||||||
|
sineData.putFloat(i);
|
||||||
|
float y = (float)Math.sin(i / 10.0f);
|
||||||
|
sineData.putFloat(y * (HEIGHT / 4.0f) + (HEIGHT / 2.0f));
|
||||||
|
sineData.putFloat(1.0f);
|
||||||
|
sineData.putFloat(1.0f);
|
||||||
|
int blue = ((int)(Math.ceil(((float)i / (float)WIDTH) * 200.0f) + 55)) & 0x000000ff;
|
||||||
|
int green = ((int)(Math.ceil((((float)WIDTH - (float)i) / (float)WIDTH) * 200.0f) + 55)) & 0x000000ff;
|
||||||
|
int red = ((int)(Math.ceil(Math.abs(y) * 200.0f) + 55.0f)) & 0x000000ff;
|
||||||
|
sineData.putInt((red << 16) | (green << 8) | blue);
|
||||||
|
|
||||||
|
}
|
||||||
|
ByteBuffer randomData = ByteBuffer.allocateDirect(WIDTH * STRUCTURE_SIZE);
|
||||||
|
randomData.order(ByteOrder.nativeOrder());
|
||||||
|
Random random = new Random(System.currentTimeMillis());
|
||||||
|
for(int i=0;i<WIDTH;i++) {
|
||||||
|
randomData.putFloat(random.nextFloat() * WIDTH);
|
||||||
|
randomData.putFloat(random.nextFloat() * HEIGHT);
|
||||||
|
randomData.putFloat(1.0f);
|
||||||
|
randomData.putFloat(1.0f);
|
||||||
|
randomData.putInt((random.nextInt(255) << 16) | (random.nextInt(255) << 8) | random.nextInt(255));
|
||||||
|
}
|
||||||
|
ByteBuffer data = sineData;
|
||||||
|
while(Keyboard.getEventKey() != Keyboard.KEY_ESCAPE || Display.isCloseRequested()) {
|
||||||
|
iDirect3DDevice9.beginScene();
|
||||||
|
iDirect3DDevice9.clear(0, null, Direct3DConstants.D3DCLEAR_TARGET, 0, 1.0f, 0);
|
||||||
|
iDirect3DDevice9.setFVF(Direct3DConstants.D3DFVF_XYZRHW | Direct3DConstants.D3DFVF_DIFFUSE);
|
||||||
|
iDirect3DDevice9.drawPrimitiveUP(Direct3DConstants.D3DPT_POINTLIST, WIDTH, data, STRUCTURE_SIZE);
|
||||||
|
iDirect3DDevice9.endScene();
|
||||||
|
iDirect3DDevice9.present(null, null, 0, null);
|
||||||
|
Display.update();
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
catch(Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
iDirect3DDevice9.release();
|
||||||
|
iDirect3D9.release();
|
||||||
|
Display.destroy();
|
||||||
|
}
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new DrunkenHyenaPoints().run();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,210 @@
|
||||||
|
package org.lwjgl.test.d3d;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.d3d.D3DPresentParameters;
|
||||||
|
import org.lwjgl.d3d.Direct3DConstants;
|
||||||
|
import org.lwjgl.d3d.Display;
|
||||||
|
import org.lwjgl.d3d.DisplayMode;
|
||||||
|
import org.lwjgl.d3d.IDirect3D9;
|
||||||
|
import org.lwjgl.d3d.IDirect3DDevice9;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class DrunkenHyenaTriangles {
|
||||||
|
private static final int STRUCTURE_SIZE = 20;
|
||||||
|
private static final int WIDTH = 640;
|
||||||
|
private static final int HEIGHT = 480;
|
||||||
|
private ByteBuffer fan1;
|
||||||
|
private ByteBuffer fan2;
|
||||||
|
private ByteBuffer strip;
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
DisplayMode[] modes = Display.getAvailableDisplayModes();
|
||||||
|
for (int i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].getWidth() == WIDTH && modes[i].getHeight() == HEIGHT && modes[i].getBitsPerPixel() >= 32 && modes[i].getFrequency() <= 75) {
|
||||||
|
try {
|
||||||
|
Display.setDisplayMode(modes[i]);
|
||||||
|
} catch (LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Display.create();
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
IDirect3D9 iDirect3D9 = IDirect3D9.create();
|
||||||
|
|
||||||
|
D3DPresentParameters params = new D3DPresentParameters();
|
||||||
|
params.Windowed = true;
|
||||||
|
params.BackBufferCount = 1;
|
||||||
|
params.SwapEffect = Direct3DConstants.D3DSWAPEFFECT_FLIP;
|
||||||
|
params.BackBufferFormat = Direct3DConstants.D3DFMT_UNKNOWN;
|
||||||
|
IDirect3DDevice9 iDirect3DDevice9 = new IDirect3DDevice9();
|
||||||
|
|
||||||
|
iDirect3D9.createDevice(Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DDEVTYPE_HAL,
|
||||||
|
Display.getHwnd(), Direct3DConstants.D3DCREATE_SOFTWARE_VERTEXPROCESSING, params,
|
||||||
|
iDirect3DDevice9);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Keyboard.create();
|
||||||
|
}
|
||||||
|
catch(LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
createPrimitives();
|
||||||
|
|
||||||
|
while(Keyboard.getEventKey() != Keyboard.KEY_ESCAPE || Display.isCloseRequested()) {
|
||||||
|
iDirect3DDevice9.beginScene();
|
||||||
|
iDirect3DDevice9.clear(0, null, Direct3DConstants.D3DCLEAR_TARGET, 0, 1.0f, 0);
|
||||||
|
iDirect3DDevice9.setFVF(Direct3DConstants.D3DFVF_XYZRHW | Direct3DConstants.D3DFVF_DIFFUSE);
|
||||||
|
iDirect3DDevice9.drawPrimitiveUP(Direct3DConstants.D3DPT_TRIANGLEFAN, 4, fan1, STRUCTURE_SIZE);
|
||||||
|
iDirect3DDevice9.drawPrimitiveUP(Direct3DConstants.D3DPT_TRIANGLEFAN, 4, fan2, STRUCTURE_SIZE);
|
||||||
|
iDirect3DDevice9.drawPrimitiveUP(Direct3DConstants.D3DPT_TRIANGLESTRIP, 9, strip, STRUCTURE_SIZE);
|
||||||
|
iDirect3DDevice9.endScene();
|
||||||
|
iDirect3DDevice9.present(null, null, 0, null);
|
||||||
|
Display.update();
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
catch(Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
iDirect3DDevice9.release();
|
||||||
|
iDirect3D9.release();
|
||||||
|
Display.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createPrimitives() {
|
||||||
|
fan1 = ByteBuffer.allocateDirect(6 * STRUCTURE_SIZE);
|
||||||
|
fan1.order(ByteOrder.nativeOrder());
|
||||||
|
fan1.putFloat(100.0f);
|
||||||
|
fan1.putFloat(100.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putInt(0xff000000);
|
||||||
|
fan1.putFloat(0.0f);
|
||||||
|
fan1.putFloat(0.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putInt(0xffff0000);
|
||||||
|
fan1.putFloat(200.0f);
|
||||||
|
fan1.putFloat(0.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putInt(0xff00ff00);
|
||||||
|
fan1.putFloat(200.0f);
|
||||||
|
fan1.putFloat(200.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putInt(0xff0000ff);
|
||||||
|
fan1.putFloat(0.0f);
|
||||||
|
fan1.putFloat(200.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putInt(0xffffffff);
|
||||||
|
fan1.putFloat(0.0f);
|
||||||
|
fan1.putFloat(0.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putFloat(1.0f);
|
||||||
|
fan1.putInt(0xffff0000);
|
||||||
|
fan2 = ByteBuffer.allocateDirect(6 * STRUCTURE_SIZE);
|
||||||
|
fan2.order(ByteOrder.nativeOrder());
|
||||||
|
fan2.putFloat(75.0f);
|
||||||
|
fan2.putFloat(350.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putInt(0xffffffff);
|
||||||
|
fan2.putFloat(0.0f);
|
||||||
|
fan2.putFloat(225.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putInt(0xffff0000);
|
||||||
|
fan2.putFloat(50.0f);
|
||||||
|
fan2.putFloat(215.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putInt(0xff7f7f00);
|
||||||
|
fan2.putFloat(75.0f);
|
||||||
|
fan2.putFloat(205.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putInt(0xff00ff00);
|
||||||
|
fan2.putFloat(125.0f);
|
||||||
|
fan2.putFloat(215.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putInt(0xff007f7f);
|
||||||
|
fan2.putFloat(150.0f);
|
||||||
|
fan2.putFloat(235.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putFloat(1.0f);
|
||||||
|
fan2.putInt(0xff0000ff);
|
||||||
|
strip = ByteBuffer.allocateDirect(11 * STRUCTURE_SIZE);
|
||||||
|
strip.order(ByteOrder.nativeOrder());
|
||||||
|
strip.putFloat(250.0f);
|
||||||
|
strip.putFloat(150.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xffff0000);
|
||||||
|
strip.putFloat(300.0f);
|
||||||
|
strip.putFloat(50.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff00ff00);
|
||||||
|
strip.putFloat(350.0f);
|
||||||
|
strip.putFloat(150.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff0000ff);
|
||||||
|
strip.putFloat(400.0f);
|
||||||
|
strip.putFloat(50.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xffff0000);
|
||||||
|
strip.putFloat(450.0f);
|
||||||
|
strip.putFloat(150.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff7f7f00);
|
||||||
|
strip.putFloat(450.0f);
|
||||||
|
strip.putFloat(150.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff7f7f00);
|
||||||
|
strip.putFloat(250.0f);
|
||||||
|
strip.putFloat(350.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xffff0000);
|
||||||
|
strip.putFloat(300.0f);
|
||||||
|
strip.putFloat(250.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff00ff00);
|
||||||
|
strip.putFloat(350.0f);
|
||||||
|
strip.putFloat(350.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff0000ff);
|
||||||
|
strip.putFloat(400.0f);
|
||||||
|
strip.putFloat(250.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xffff0000);
|
||||||
|
strip.putFloat(450.0f);
|
||||||
|
strip.putFloat(350.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putFloat(1.0f);
|
||||||
|
strip.putInt(0xff7f7f00);
|
||||||
|
}
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new DrunkenHyenaTriangles().run();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,323 @@
|
||||||
|
package org.lwjgl.test.d3d;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.d3d.D3DMatrix;
|
||||||
|
import org.lwjgl.d3d.D3DPresentParameters;
|
||||||
|
import org.lwjgl.d3d.D3DUtil;
|
||||||
|
import org.lwjgl.d3d.D3DVector;
|
||||||
|
import org.lwjgl.d3d.Direct3DConstants;
|
||||||
|
import org.lwjgl.d3d.Display;
|
||||||
|
import org.lwjgl.d3d.DisplayMode;
|
||||||
|
import org.lwjgl.d3d.IDirect3D9;
|
||||||
|
import org.lwjgl.d3d.IDirect3DDevice9;
|
||||||
|
import org.lwjgl.d3d.IDirect3DVertexBuffer9;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class DrunkenHyenaWorldTransform {
|
||||||
|
private static final int STRUCTURE_SIZE = 16;
|
||||||
|
private static final int WIDTH = 640;
|
||||||
|
private static final int HEIGHT = 480;
|
||||||
|
|
||||||
|
private IDirect3D9 iDirect3D9;
|
||||||
|
private IDirect3DDevice9 iDirect3DDevice9;
|
||||||
|
private IDirect3DVertexBuffer9 iDirect3DVertexBuffer9;
|
||||||
|
|
||||||
|
private int g_list_count;
|
||||||
|
|
||||||
|
float scaledTri_scale_x = 1.0f;
|
||||||
|
float scaledTri_scale_y = 1.0f;
|
||||||
|
float scaledTri_dir_x = 1.0f;
|
||||||
|
float scaledTri_dir_y = 1.0f;
|
||||||
|
|
||||||
|
float translatedTri_pos_x = 1.0f;
|
||||||
|
float translatedTri_dir_x = 1.0f;
|
||||||
|
|
||||||
|
float rotatedTri_rot_y = 0.0f;
|
||||||
|
|
||||||
|
float rotAndTransTri_rot_z = 0.0f;
|
||||||
|
float rotAndTransTri_pos_x = 1.0f;
|
||||||
|
float rotAndTransTri_dir_x = 1.0f;
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
long curentTime = System.currentTimeMillis();
|
||||||
|
long elapsed = 0;
|
||||||
|
long diffTime = 0;
|
||||||
|
try {
|
||||||
|
DisplayMode[] modes = Display.getAvailableDisplayModes();
|
||||||
|
for (int i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].getWidth() == WIDTH
|
||||||
|
&& modes[i].getHeight() == HEIGHT
|
||||||
|
&& modes[i].getBitsPerPixel() >= 32
|
||||||
|
&& modes[i].getFrequency() <= 75) {
|
||||||
|
try {
|
||||||
|
Display.setDisplayMode(modes[i]);
|
||||||
|
}
|
||||||
|
catch (LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Display.create();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
long hResult = Direct3DConstants.D3D_OK;
|
||||||
|
|
||||||
|
iDirect3D9 = IDirect3D9.create();
|
||||||
|
|
||||||
|
D3DPresentParameters params = new D3DPresentParameters();
|
||||||
|
params.Windowed = true;
|
||||||
|
params.BackBufferCount = 1;
|
||||||
|
params.SwapEffect = Direct3DConstants.D3DSWAPEFFECT_FLIP;
|
||||||
|
params.BackBufferFormat = Direct3DConstants.D3DFMT_UNKNOWN;
|
||||||
|
iDirect3DDevice9 = new IDirect3DDevice9();
|
||||||
|
|
||||||
|
hResult = iDirect3D9.createDevice(Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DDEVTYPE_HAL,
|
||||||
|
Display.getHwnd(), Direct3DConstants.D3DCREATE_SOFTWARE_VERTEXPROCESSING, params, iDirect3DDevice9);
|
||||||
|
if (hResult != Direct3DConstants.D3D_OK) {
|
||||||
|
throw new RuntimeException("Unable to create the device(" + hResult
|
||||||
|
+ ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
iDirect3DDevice9.setRenderState(Direct3DConstants.D3DRS_LIGHTING, 0);
|
||||||
|
iDirect3DDevice9.setRenderState(Direct3DConstants.D3DRS_CULLMODE, Direct3DConstants.D3DCULL_NONE);
|
||||||
|
initMatrices();
|
||||||
|
|
||||||
|
ByteBuffer triangleList = ByteBuffer.allocateDirect(3 * STRUCTURE_SIZE);
|
||||||
|
triangleList.order(ByteOrder.nativeOrder());
|
||||||
|
triangleList.putFloat(0);
|
||||||
|
triangleList.putFloat(1);
|
||||||
|
triangleList.putFloat(0);
|
||||||
|
triangleList.putInt(0xFFFF0000);
|
||||||
|
triangleList.putFloat(1);
|
||||||
|
triangleList.putFloat(-1);
|
||||||
|
triangleList.putFloat(0);
|
||||||
|
triangleList.putInt(0xFF00FF00);
|
||||||
|
triangleList.putFloat(-1);
|
||||||
|
triangleList.putFloat(-1);
|
||||||
|
triangleList.putFloat(0);
|
||||||
|
triangleList.putInt(0xFF0000FF);
|
||||||
|
|
||||||
|
int vert_count = triangleList.capacity() / STRUCTURE_SIZE;
|
||||||
|
int byte_count = vert_count * STRUCTURE_SIZE;
|
||||||
|
g_list_count = vert_count / 3;
|
||||||
|
|
||||||
|
iDirect3DVertexBuffer9 = new IDirect3DVertexBuffer9();
|
||||||
|
hResult = iDirect3DDevice9.createVertexBuffer(byte_count, Direct3DConstants.D3DUSAGE_WRITEONLY,
|
||||||
|
Direct3DConstants.D3DFVF_XYZ | Direct3DConstants.D3DFVF_DIFFUSE,
|
||||||
|
Direct3DConstants.D3DPOOL_MANAGED, iDirect3DVertexBuffer9, 0);
|
||||||
|
if (hResult != Direct3DConstants.D3D_OK) {
|
||||||
|
throw new RuntimeException("Unable to create the vertex buffer(" + hResult + ")");
|
||||||
|
}
|
||||||
|
hResult = iDirect3DVertexBuffer9.Lock(0, 0, triangleList, 0);
|
||||||
|
if (hResult != Direct3DConstants.D3D_OK) {
|
||||||
|
throw new RuntimeException("Failed to lock the vertex buffer(" + hResult + ")");
|
||||||
|
}
|
||||||
|
iDirect3DVertexBuffer9.Unlock();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Keyboard.create();
|
||||||
|
}
|
||||||
|
catch (LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (Keyboard.getEventKey() != Keyboard.KEY_ESCAPE || Display.isCloseRequested()) {
|
||||||
|
diffTime = System.currentTimeMillis() - curentTime;
|
||||||
|
curentTime = System.currentTimeMillis();
|
||||||
|
elapsed += diffTime;
|
||||||
|
iDirect3DDevice9.beginScene();
|
||||||
|
iDirect3DDevice9.clear(0, null, Direct3DConstants.D3DCLEAR_TARGET, 0x00000000, 1.0f, 0);
|
||||||
|
iDirect3DDevice9.setFVF(Direct3DConstants.D3DFVF_XYZ | Direct3DConstants.D3DFVF_DIFFUSE);
|
||||||
|
iDirect3DDevice9.setStreamSource(0, iDirect3DVertexBuffer9, 0, STRUCTURE_SIZE);
|
||||||
|
|
||||||
|
render_scaled_tri();
|
||||||
|
|
||||||
|
render_translated_tri();
|
||||||
|
|
||||||
|
render_rotated_tri();
|
||||||
|
|
||||||
|
render_rot_and_trans_tri();
|
||||||
|
|
||||||
|
iDirect3DDevice9.endScene();
|
||||||
|
iDirect3DDevice9.present(null, null, 0, null);
|
||||||
|
Display.update();
|
||||||
|
if (elapsed > 5000) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
iDirect3DDevice9.release();
|
||||||
|
iDirect3D9.release();
|
||||||
|
Display.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void render_scaled_tri() {
|
||||||
|
D3DMatrix scale_matrix = new D3DMatrix();
|
||||||
|
|
||||||
|
D3DUtil.D3DXMatrixScaling(scale_matrix, scaledTri_scale_x,
|
||||||
|
scaledTri_scale_y, 1.0f);
|
||||||
|
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_WORLD,
|
||||||
|
scale_matrix);
|
||||||
|
|
||||||
|
iDirect3DDevice9.drawPrimitive(Direct3DConstants.D3DPT_TRIANGLELIST, // PrimitiveType
|
||||||
|
0, // StartVertex
|
||||||
|
g_list_count); // PrimitiveCount
|
||||||
|
|
||||||
|
scaledTri_scale_x += 0.01f * scaledTri_dir_x;
|
||||||
|
if (scaledTri_scale_x > 4.0f) {
|
||||||
|
scaledTri_dir_x = -1.0f;
|
||||||
|
}
|
||||||
|
else if (scaledTri_scale_x < 0.25f) {
|
||||||
|
scaledTri_dir_x = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
scaledTri_scale_y += 0.011f * scaledTri_dir_y;
|
||||||
|
if (scaledTri_scale_y > 4.0f) {
|
||||||
|
scaledTri_dir_y = -1.0f;
|
||||||
|
}
|
||||||
|
else if (scaledTri_scale_y < 0.25f) {
|
||||||
|
scaledTri_dir_y = 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void render_translated_tri() {
|
||||||
|
D3DMatrix trans_matrix = new D3DMatrix();
|
||||||
|
|
||||||
|
D3DUtil.D3DXMatrixTranslation(trans_matrix, translatedTri_pos_x, 2.5f,
|
||||||
|
0.0f);
|
||||||
|
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_WORLD,
|
||||||
|
trans_matrix);
|
||||||
|
|
||||||
|
iDirect3DDevice9.drawPrimitive(Direct3DConstants.D3DPT_TRIANGLELIST, // PrimitiveType
|
||||||
|
0, // StartVertex
|
||||||
|
g_list_count); // PrimitiveCount
|
||||||
|
|
||||||
|
translatedTri_pos_x += 0.01f * translatedTri_dir_x;
|
||||||
|
if (translatedTri_pos_x > 3.5f) {
|
||||||
|
translatedTri_dir_x = -1.0f;
|
||||||
|
}
|
||||||
|
else if (translatedTri_pos_x < -3.5f) {
|
||||||
|
translatedTri_dir_x = 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void render_rotated_tri() {
|
||||||
|
D3DMatrix rot_matrix = new D3DMatrix();
|
||||||
|
|
||||||
|
D3DUtil.D3DXMatrixRotationY(rot_matrix, rotatedTri_rot_y);
|
||||||
|
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_WORLD, rot_matrix);
|
||||||
|
|
||||||
|
iDirect3DDevice9.drawPrimitive(Direct3DConstants.D3DPT_TRIANGLELIST, // PrimitiveType
|
||||||
|
0, // StartVertex
|
||||||
|
g_list_count); // PrimitiveCount
|
||||||
|
|
||||||
|
// 2*PI is a complete circle so we reset the value to keep the variable
|
||||||
|
// from overflowing
|
||||||
|
rotatedTri_rot_y += 0.01f;
|
||||||
|
if (rotatedTri_rot_y > Direct3DConstants.D3DX_PI * 2) {
|
||||||
|
rotatedTri_rot_y -= Direct3DConstants.D3DX_PI * 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void render_rot_and_trans_tri() {
|
||||||
|
D3DMatrix rot_matrix = new D3DMatrix();
|
||||||
|
D3DMatrix trans_matrix = new D3DMatrix();
|
||||||
|
D3DMatrix world_matrix = new D3DMatrix();
|
||||||
|
|
||||||
|
D3DUtil.D3DXMatrixRotationZ(rot_matrix, rotAndTransTri_rot_z);
|
||||||
|
D3DUtil.D3DXMatrixTranslation(trans_matrix, rotAndTransTri_pos_x, -2.5f, 0.0f);
|
||||||
|
D3DMatrix temp = D3DUtil.D3DXMatrixMultiply(world_matrix, rot_matrix, trans_matrix); //Rot * Trans
|
||||||
|
//D3DXMatrixMultiply(&world_matrix,&trans_matrix,&rot_matrix); //Trans * Rot
|
||||||
|
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_WORLD, world_matrix);
|
||||||
|
|
||||||
|
|
||||||
|
iDirect3DDevice9.drawPrimitive(Direct3DConstants.D3DPT_TRIANGLELIST, //PrimitiveType
|
||||||
|
0, //StartVertex
|
||||||
|
g_list_count); //PrimitiveCount
|
||||||
|
|
||||||
|
|
||||||
|
rotAndTransTri_rot_z += 0.01f;
|
||||||
|
if(rotAndTransTri_rot_z > Direct3DConstants.D3DX_PI * 2){
|
||||||
|
rotAndTransTri_rot_z -= Direct3DConstants.D3DX_PI * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
rotAndTransTri_pos_x += 0.01f * rotAndTransTri_dir_x;
|
||||||
|
if(rotAndTransTri_pos_x > 3.5f){
|
||||||
|
rotAndTransTri_dir_x = -1.0f;
|
||||||
|
}
|
||||||
|
else if(rotAndTransTri_pos_x < -3.5f){
|
||||||
|
rotAndTransTri_dir_x = 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initMatrices() {
|
||||||
|
D3DMatrix view_matrix = new D3DMatrix();
|
||||||
|
D3DMatrix projection_matrix = new D3DMatrix();
|
||||||
|
D3DVector eye_vector = new D3DVector();
|
||||||
|
D3DVector lookat_vector = new D3DVector();
|
||||||
|
D3DVector up_vector = new D3DVector();
|
||||||
|
D3DMatrix world_matrix = new D3DMatrix();
|
||||||
|
float aspect;
|
||||||
|
|
||||||
|
// Here we build our View Matrix, think of it as our camera.
|
||||||
|
|
||||||
|
// First we specify that our viewpoint is 8 units back on the Z-axis
|
||||||
|
eye_vector.x = 0.0f;
|
||||||
|
eye_vector.y = 0.0f;
|
||||||
|
eye_vector.z = -8.0f;
|
||||||
|
|
||||||
|
// We are looking towards the origin
|
||||||
|
lookat_vector.x = 0.0f;
|
||||||
|
lookat_vector.y = 0.0f;
|
||||||
|
lookat_vector.z = 0.0f;
|
||||||
|
|
||||||
|
// The "up" direction is the positive direction on the y-axis
|
||||||
|
up_vector.x = 0.0f;
|
||||||
|
up_vector.y = 1.0f;
|
||||||
|
up_vector.z = 0.0f;
|
||||||
|
|
||||||
|
D3DUtil.D3DXMatrixLookAtLH(view_matrix, eye_vector, lookat_vector,
|
||||||
|
up_vector);
|
||||||
|
|
||||||
|
// Since our 'camera' will never move, we can set this once at the
|
||||||
|
// beginning and never worry about it again
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_VIEW, view_matrix);
|
||||||
|
|
||||||
|
aspect = ((float) WIDTH / (float) WIDTH);
|
||||||
|
|
||||||
|
D3DUtil.D3DXMatrixPerspectiveFovLH(projection_matrix, // Result Matrix
|
||||||
|
(float) Math.PI / 4, // Field of View, in radians.
|
||||||
|
aspect, // Aspect ratio
|
||||||
|
1.0f, // Near view plane
|
||||||
|
100.0f); // Far view plane
|
||||||
|
|
||||||
|
// Our Projection matrix won't change either, so we set it now and never
|
||||||
|
// touch
|
||||||
|
// it again.
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_PROJECTION,
|
||||||
|
projection_matrix);
|
||||||
|
|
||||||
|
// The World Matrix transforms Model Coordinates into World Space
|
||||||
|
// coordinates.
|
||||||
|
// Setting it to Identity means there is no transformation, so Model
|
||||||
|
// Space is directly
|
||||||
|
// mapped onto World Space.
|
||||||
|
D3DUtil.D3DXMatrixIdentity(world_matrix);
|
||||||
|
iDirect3DDevice9.setTransform(Direct3DConstants.D3DTS_WORLD,
|
||||||
|
world_matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new DrunkenHyenaWorldTransform().run();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
package org.lwjgl.test.d3d;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
|
import org.lwjgl.LWJGLException;
|
||||||
|
import org.lwjgl.d3d.D3DAdapterIdentifier9;
|
||||||
|
import org.lwjgl.d3d.D3DCaps9;
|
||||||
|
import org.lwjgl.d3d.D3DDisplaymode;
|
||||||
|
import org.lwjgl.d3d.D3DPresentParameters;
|
||||||
|
import org.lwjgl.d3d.Direct3DConstants;
|
||||||
|
import org.lwjgl.d3d.Display;
|
||||||
|
import org.lwjgl.d3d.DisplayMode;
|
||||||
|
import org.lwjgl.d3d.IDirect3D9;
|
||||||
|
import org.lwjgl.d3d.IDirect3DDevice9;
|
||||||
|
import org.lwjgl.input.Keyboard;
|
||||||
|
|
||||||
|
public class IDirect3D9Test {
|
||||||
|
public IDirect3D9Test() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
DisplayMode[] modes = Display.getAvailableDisplayModes();
|
||||||
|
for (int i = 0; i < modes.length; i++) {
|
||||||
|
if (modes[i].getWidth() == 800 && modes[i].getHeight() == 600 && modes[i].getBitsPerPixel() >= 32 && modes[i].getFrequency() <= 75) {
|
||||||
|
try {
|
||||||
|
Display.setDisplayMode(modes[i]);
|
||||||
|
} catch (LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Display.create();
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
IDirect3D9 iDirect3D9 = IDirect3D9.create();
|
||||||
|
System.out.println("pointer to IDirect3D9 = " + iDirect3D9.getIDirect3D9());
|
||||||
|
System.out.println(" adapter count = " + iDirect3D9.getAdapterCount());
|
||||||
|
//
|
||||||
|
// D3DDisplaymode displaymode = new D3DDisplaymode();
|
||||||
|
// displaymode.Width = 1024;
|
||||||
|
// displaymode.Height = 768;
|
||||||
|
// displaymode.RefreshRate = 85;
|
||||||
|
// displaymode.Format = Direct3DConstants.D3DFMT_X8R8G8B8;
|
||||||
|
// System.out.println("enumAdapterModes = " + iDirect3D9.enumAdapterModes(
|
||||||
|
// Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DFMT_X8R8G8B8, 0, displaymode));
|
||||||
|
// displaymode = new D3DDisplaymode();
|
||||||
|
// System.out.println("getAdapterDisplayMode = " + iDirect3D9.getAdapterDisplayMode(
|
||||||
|
// Direct3DConstants.D3DADAPTER_DEFAULT, displaymode));
|
||||||
|
// System.out.println(displaymode);
|
||||||
|
//
|
||||||
|
// D3DAdapterIdentifier9 identifier = new D3DAdapterIdentifier9();
|
||||||
|
// System.out.println("getAdapterIdentifier = " + iDirect3D9.getAdapterIdentifier(
|
||||||
|
// Direct3DConstants.D3DADAPTER_DEFAULT, 0, identifier));
|
||||||
|
// System.out.println(identifier);
|
||||||
|
//
|
||||||
|
// System.out.println("getAdapterModeCount = " + iDirect3D9.getAdapterModeCount(
|
||||||
|
// Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DFMT_X8R8G8B8));
|
||||||
|
//
|
||||||
|
// D3DCaps9 caps = new D3DCaps9();
|
||||||
|
// System.out.println("getDeviceCaps = " + iDirect3D9.getDeviceCaps(
|
||||||
|
// Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DDEVTYPE_HAL, caps));
|
||||||
|
// System.out.println(caps);
|
||||||
|
|
||||||
|
D3DPresentParameters params = new D3DPresentParameters();
|
||||||
|
params.Windowed = true;
|
||||||
|
params.BackBufferCount = 1;
|
||||||
|
params.SwapEffect = Direct3DConstants.D3DSWAPEFFECT_FLIP;
|
||||||
|
params.BackBufferFormat = Direct3DConstants.D3DFMT_UNKNOWN;
|
||||||
|
IDirect3DDevice9 iDirect3DDevice9 = new IDirect3DDevice9();
|
||||||
|
|
||||||
|
System.out.println("createDevice = " + iDirect3D9.createDevice(Direct3DConstants.D3DADAPTER_DEFAULT, Direct3DConstants.D3DDEVTYPE_HAL,
|
||||||
|
Display.getHwnd(), Direct3DConstants.D3DCREATE_SOFTWARE_VERTEXPROCESSING, params, iDirect3DDevice9));
|
||||||
|
System.out.println("pointer to iDirect3DDevice9 = " + iDirect3DDevice9.getIDirect3DDevice9());
|
||||||
|
|
||||||
|
try {
|
||||||
|
Keyboard.create();
|
||||||
|
}
|
||||||
|
catch(LWJGLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteBuffer vertex = ByteBuffer.allocateDirect(60);
|
||||||
|
vertex.order(ByteOrder.nativeOrder());
|
||||||
|
vertex.putFloat(800.0f / 2.0f);
|
||||||
|
vertex.putFloat(100.0f);
|
||||||
|
vertex.putFloat(1.0f);
|
||||||
|
vertex.putFloat(1.0f);
|
||||||
|
vertex.putInt(0xffffffff);
|
||||||
|
vertex.putFloat(800.0f * 3.0f / 4.0f);
|
||||||
|
vertex.putFloat(350.0f);
|
||||||
|
vertex.putFloat(1.0f);
|
||||||
|
vertex.putFloat(1.0f);
|
||||||
|
vertex.putInt(0xffffffff);
|
||||||
|
vertex.putFloat(800.0f / 4.0f);
|
||||||
|
vertex.putFloat(350.0f);
|
||||||
|
vertex.putFloat(1.0f);
|
||||||
|
vertex.putFloat(1.0f);
|
||||||
|
vertex.putInt(0xffffffff);
|
||||||
|
while(Keyboard.getEventKey() != Keyboard.KEY_ESCAPE || Display.isCloseRequested()) {
|
||||||
|
iDirect3DDevice9.beginScene();
|
||||||
|
iDirect3DDevice9.clear(0, null, Direct3DConstants.D3DCLEAR_TARGET, 0, 1.0f, 0);
|
||||||
|
iDirect3DDevice9.setFVF(Direct3DConstants.D3DFVF_XYZRHW | Direct3DConstants.D3DFVF_DIFFUSE);
|
||||||
|
iDirect3DDevice9.drawPrimitiveUP(Direct3DConstants.D3DPT_TRIANGLELIST, 1, vertex, 20);
|
||||||
|
iDirect3DDevice9.endScene();
|
||||||
|
iDirect3DDevice9.present(null, null, 0, null);
|
||||||
|
Display.update();
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
catch(Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
iDirect3DDevice9.release();
|
||||||
|
iDirect3D9.release();
|
||||||
|
Display.destroy();
|
||||||
|
}
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new IDirect3D9Test().run();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue