(LWJGL) Applets are (hopefully) functional now:
[lwjgl archive=jgolwjgl.jar class=jgolwjgl.JgoLwjglApplet width=512 height=512]
It should look like a 512x512 black rectangle with a single triangle rendered. Please test! :-*
Syntax:
// lwjgl applet
[ lwjgl archive=your.jar class=your.Applet width=512 height=512 ]
// just like your regular applet
[ applet archive=your.jar class=your.Applet width=512 height=512 ]
I will have to add the upload feature later.
I don’t quite get why there isn’t some abstract class in LWJGL that you extend for your applet, I had to rip out code from the GearsApplet demo, resulting in rather messy and verbose code to render 1 triangle, which IMHO the developer shouldn’t be exposed to. Anyway, I disgress… Here’s the code to get that triangle on screen:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Canvas;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import static org.lwjgl.opengl.GL11.*;
public class JgoLwjglApplet extends SuggestedTemplateApplet
{
public void drawTriangle()
{
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0);
glVertex3f(-0.5f, -0.5f, 0.0f);
glColor3f(0, 1, 0);
glVertex3f(+0.5f, -0.5f, 0.0f);
glColor3f(0, 0, 1);
glVertex3f(+0.5f, +0.5f, 0.0f);
glEnd();
}
@Override
@@ public void displayReady()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
while (running)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawTriangle();
Display.update();
try
{
Thread.sleep(100);
}
catch (Exception exc)
{
//
}
}
Display.destroy();
}
}
public abstract class SuggestedTemplateApplet extends Applet
{
Canvas holder;
Thread gameThread;
volatile boolean running;
void startLWJGL()
{
gameThread = new Thread()
{
public void run()
{
running = true;
try
{
Display.setParent(holder);
Display.create();
}
catch (LWJGLException e)
{
displayFailed(e);
return;
}
displayReady();
}
};
gameThread.start();
}
@@ public abstract void displayReady();
@@ public abstract void displayFailed(LWJGLException exc);
void stopLWJGL()
{
running = false;
try
{
gameThread.join();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public void destroy()
{
remove(holder);
super.destroy();
}
public void init()
{
setLayout(new BorderLayout());
try
{
holder = new Canvas()
{
public void addNotify()
{
super.addNotify();
startLWJGL();
}
public void removeNotify()
{
stopLWJGL();
super.removeNotify();
}
};
holder.setSize(getWidth(), getHeight());
add(holder);
holder.setFocusable(true);
holder.requestFocus();
holder.setIgnoreRepaint(true);
setVisible(true);
}
catch (Exception e)
{
System.err.println(e);
throw new RuntimeException("Unable to create display");
}
}
}