package org.jogamp.glg2d.examples.shaders;
import java.awt.Dimension;
import java.awt.RenderingHints.Key;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.UIManager;
import org.jogamp.glg2d.G2DDrawingHelper;
import org.jogamp.glg2d.GLG2DCanvas;
import org.jogamp.glg2d.GLG2DSimpleEventListener;
import org.jogamp.glg2d.GLGraphics2D;
import org.jogamp.glg2d.UIDemo;
@SuppressWarnings("serial")
public class DepthSimExample {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final JFrame frame = new JFrame("Depth Shaker Example");
frame.setContentPane(new GLG2DCanvas(new UIDemo()) {
@Override
protected GLG2DSimpleEventListener createG2DListener(JComponent drawingComponent) {
return new GLG2DSimpleEventListener(drawingComponent) {
@Override
protected GLGraphics2D createGraphics2D(GLAutoDrawable drawable) {
return new GLGraphics2D() {
@Override
protected void createDrawingHelpers() {
super.createDrawingHelpers();
addG2DDrawingHelper(new DepthShaker());
}
@Override
protected void scissor(boolean enable) {
// nop
}
};
}
};
}
});
Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.getContentPane().repaint();
}
});
timer.setRepeats(true);
timer.start();
// frame.setContentPane(new UIDemo());
frame.setPreferredSize(new Dimension(1024, 768));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
static class DepthShaker implements G2DDrawingHelper {
double shiftX;
double shiftY;
double theta = 0;
GL2 gl;
@Override
public void dispose() {
}
@Override
public void pop(GLGraphics2D parentG2d) {
gl.glTranslated(-shiftX, -shiftY, 0);
}
@Override
public void push(GLGraphics2D newG2d) {
gl.glTranslated(shiftX, shiftY, 0);
}
@Override
public void resetHints() {
}
@Override
public void setHint(Key key, Object value) {
}
@Override
public void setG2D(GLGraphics2D g2d) {
theta += 0.2;
shiftX = Math.round(Math.sin(theta) * 100) / 100d * 1;
shiftY = Math.round(Math.cos(theta) * 100) / 100d * 1;
gl = g2d.getGLContext().getGL().getGL2();
}
}
}