Hello,
Recently I tried to use full screen mode in my game but I found that GLCanvases that I use did not showed up after my change.
Here is an example code that shows my problem:
package Test;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.World;
public class FullScreenTest extends JFrame
{
private GraphicsDevice device;
private FrameBuffer buffer;
private Canvas canvas;
private World world;
private Object3D object;
private Timer timer;
public static void main(String[] args)
{
FullScreenTest frame = new FullScreenTest();
frame.setVisible(true);
}
public FullScreenTest()
{
initResolution();
initComponents();
initCanvas();
initWorld();
startRendering();
}
private void startRendering()
{
timer = new Timer(50, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
renderScene();
}
});
}
protected void renderScene()
{
object.rotateX(0.1f);
object.rotateY(0.2f);
buffer.clear(java.awt.Color.BLACK);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.displayGLOnly();
canvas.repaint();
}
private void initWorld()
{
world = new World();
world.setAmbientLight(10, 10, 10);
world.addLight(new SimpleVector(0, 0, -150), 40, 40, 40);
world.getCamera().setPosition(0, 0, -10);
world.getCamera().lookAt(new SimpleVector(0, 0, 0));
object = Primitives.getCube(2);
object.setAdditionalColor(Color.RED);
object.build();
object.setCenter(new SimpleVector(0, 0, 0));
world.addObject(object);
}
private void initCanvas()
{
buffer = new FrameBuffer(400, 400, FrameBuffer.SAMPLINGMODE_NORMAL);
buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
canvas = buffer.enableGLCanvasRenderer();
add(canvas, BorderLayout.CENTER);
}
private void initComponents()
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel buttonBox = new JPanel();
buttonBox.setLayout(new BoxLayout(buttonBox, BoxLayout.LINE_AXIS));
getContentPane().add(buttonBox, BorderLayout.PAGE_END);
JButton button = new JButton("Start");
buttonBox.add(button);
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
timer.start();
}
});
button = new JButton("Exit");
buttonBox.add(button);
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
timer.stop();
device.setFullScreenWindow(null);
setVisible(false);
dispose();
}
});
}
private void initResolution()
{
setUndecorated(true);
setResizable(false);
device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
device.setFullScreenWindow(this);
DisplayMode mode = device.getDisplayMode();
setSize(mode.getWidth(), mode.getHeight());
}
}
If I comment out the device.setFullScreenWindow(this) line it works.
Does anyone know what I have to change to make it work in full screen mode?
I use: JPCT 1.18 and java 1.6
Thanks,
Wojtek