Ok here is a link to a screenshot:
http://i18.photobucket.com/albums/b148/crash0veride007/scrnshot.jpgSo for someone smarter than I according to the OpenGL/SLi stuff in this guide:
http://download.nvidia.com/developer/GPU_Programming_Guide/GPU_Programming_Guide.pdf1) does LWJGL display.update work and play well with SLi? AKA: swapbuffers
2) How could our code be best written in LWJGL to take advantage of SLi ?
and also some code to help further this discussion:
package JavaGL;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.glu.GLU;
import JavaGL.tools.Object3D;
import JavaGL.tools.Texture;
import JavaGL.tools.TextureLoader;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import org.lwjgl.input.Keyboard;
public class MeshPolys {
public static boolean done = false;
public static String windowTitle = "Crash0veride007 JavaGL";
public static DisplayMode displayMode;
public static Object3D mesh;
public static TextureLoader textureloader;
public static Texture texture;
public static float light1Ambient[] = { 0.4f, 0.4f, 0.4f, 1.0f }; // Ambient Light1 Values
public static float light1Diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; // Diffuse Light1 Values
public static float light1Specular[] = { 0.5f, 0.5f, 0.5f, 1.0f }; // Specular Light1 Values
public static float light1Position[] = { 0.0f, 0.0f, 85.0f, 1.0f }; // Light1 Position
public static float light2Ambient[] = { 0.4f, 0.4f, 0.4f, 1.0f }; // Ambient Light2 Values
public static float light2Diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; // Diffuse Light2 Values
public static float light2Specular[] = { 0.5f, 0.5f, 0.5f, 1.0f }; // Specular Light2 Values
public static float light2Position[] = { 0.0f, 0.0f, -85.0f, 1.0f }; // Light2 Position
public static float angle =0.0f;
public static void main(String[] args) {
MeshPolys runit = new MeshPolys();
runit.run();
}
public void run() {
long startTime = System.currentTimeMillis() + 5000;
long fps = 0;
try {
init();
while (!done) {
MainLoop();
Display.update();
if (startTime > System.currentTimeMillis()) {
fps++;
} else {
long timeUsed = 5000 + (startTime - System.currentTimeMillis());
startTime = System.currentTimeMillis() + 5000;
String outdata = fps + " frames in " + (float) (timeUsed / 1000f) + " seconds = "+ (fps / (timeUsed / 1000f))+" FPS";
System.out.println( outdata );
Display.setTitle(windowTitle + " " + outdata);
fps = 0;
}
}
cleanup();
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
public void MainLoop() {
rendershit();
pollMK();
}
public void createWindow() throws Exception {
DisplayMode d[] = Display.getAvailableDisplayModes();
for (int i = 0; i < d.length; i++) {
if (d
.getWidth() == 1024
&& d.getHeight() == 768
&& d.getBitsPerPixel() == 32) {
displayMode = d;
break;
}
}
Display.setDisplayMode(displayMode);
Display.setTitle(windowTitle);
Display.setFullscreen(false);
Display.create();
}
public void init() throws Exception {
createWindow();
try {
Keyboard.create();
}
catch (Exception e) {}
initGL();
loadtexture();
loadmesh();
Display.setVSyncEnabled(false);
//texture.bind();
ByteBuffer temp = ByteBuffer.allocateDirect(16);
temp.order(ByteOrder.nativeOrder());
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(light1Ambient).flip()); // Setup The Ambient Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(light1Diffuse).flip()); // Setup The Diffuse Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR, (FloatBuffer)temp.asFloatBuffer().put(light1Specular).flip()); // Setup The Specular Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(light1Position).flip()); // Position The Light
GL11.glEnable(GL11.GL_LIGHT1); // Enable Light One
GL11.glLight(GL11.GL_LIGHT2, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(light2Ambient).flip()); // Setup The Ambient Light
GL11.glLight(GL11.GL_LIGHT2, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(light2Diffuse).flip()); // Setup The Diffuse Light
GL11.glLight(GL11.GL_LIGHT2, GL11.GL_SPECULAR, (FloatBuffer)temp.asFloatBuffer().put(light2Specular).flip()); // Setup The Specular Light
GL11.glLight(GL11.GL_LIGHT2, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(light2Position).flip()); // Position The Light
GL11.glEnable(GL11.GL_LIGHT2); // Enable Light Two
}
public void initGL() {
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GLU.gluPerspective(80.0f,(float) displayMode.getWidth() / (float) displayMode.getHeight(),0.1f,1000.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
//GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
//GL11.glFrontFace(GL11.GL_CCW);
GLU.gluLookAt(0.0f, 0.0f, 95.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
}
public void loadmesh() {
//FileReader f_read;
String path ="mesh/imp.obj";
String matpath = "JavaGL/mesh/";
try {
InputStream r_path = getClass().getResourceAsStream(path);
BufferedReader b_read = new BufferedReader(new InputStreamReader(r_path));
//f_read = new FileReader(r_path);
//BufferedReader b_read = new BufferedReader(f_read);
mesh = new Object3D(b_read,true, matpath);
r_path.close();
b_read.close();
} catch (Exception e) {
System.out.println("Could not open file: " + path);
}
}
public void loadtexture() {
String texpath = "JavaGL/mesh/imp_d.png";
try {
textureloader = new TextureLoader(1.0f);
texture = textureloader.getTexture(texpath);
} catch (Exception e) {
System.out.println("Could not open file: " + texpath);
}
}
public void pollMK() {
while ( Keyboard.next() ) {
if (Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) {
done = true;
}
}
if(Display.isCloseRequested()) {
done = true;
}
}
public void rendershit() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glPushMatrix();
//GL11.glRotatef(angle, 1.0f, .0f, 0.0f);
GL11.glRotatef(angle, 0.0f, 1.0f, 0.0f);
//GL11.glRotatef(angle, 0.0f, 0.0f, 1.0f);
GL11.glPushMatrix();
if (mesh != null)
mesh.opengldraw();
GL11.glPopMatrix();
angle = (angle+0.1f)%360;
GL11.glPopMatrix();
//GL11.glFlush();
}
public void cleanup() {
Display.destroy();
}
}