Guest User

opengl test

a guest
Mar 19th, 2014
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.54 KB | None | 0 0
  1. import javax.swing.JFrame;
  2.  
  3. import javax.media.opengl.GL2;
  4. import javax.media.opengl.GLAutoDrawable;
  5. import javax.media.opengl.GLCapabilities;
  6. import javax.media.opengl.GLDrawable;
  7. import javax.media.opengl.GLEventListener;
  8. import javax.media.opengl.GLProfile;
  9. import javax.media.opengl.awt.GLCanvas;
  10. import static javax.media.opengl.GL2.*;
  11.  
  12. public class test extends JFrame implements Runnable
  13. {
  14.   private GLCanvas canvas;
  15.  
  16.   public static long oldTime;
  17.  
  18.   public static long renderTime;
  19.  
  20.   private final int screenW = 800 , screenH = 600;
  21.  
  22.   /**
  23.    * Serial version ID
  24.    */
  25.   static final long serialVersionUID = 20090529;
  26.  
  27.   public static final String[] fragShader = new String[] {
  28.     "#version 330 core\n" +
  29.     "in vec4 fragColor;\n" +
  30.     "out vec4 color;\n" +
  31.     "void main(void)\n" +
  32.     "{\n" +
  33.     "  color = fragColor;\n" +
  34.     "}"};
  35.   public static final String[] vertexShader = new String[] {
  36.     "#version 330 core\n" +
  37.     "layout (location = 0) in vec2 p0;\n" +
  38.     "layout (location = 1) in vec2 p1;\n" +
  39.     "layout (location = 2) in vec2 p2;\n" +
  40.     "layout (location = 3) in vec4 color;\n" +
  41.     "out vec4 fragColor;\n" +
  42.     "void main(void)\n" +
  43.     "{\n" +
  44.     "  if(gl_VertexID == 0)\n" +
  45.     "    gl_Position.xy = p0;\n" +
  46.     "  else if(gl_VertexID == 1)\n" +
  47.     "    gl_Position.xy = p1;\n" +
  48.     "  else if(gl_VertexID == 2)\n" +
  49.     "    gl_Position.xy = p2;\n" +
  50.     "  gl_Position.z = 0;\n" +
  51.     "  gl_Position.w = 1;\n" +
  52.     "  fragColor = color;\n" +
  53.     "}"};
  54.  
  55.   private int shader;
  56.  
  57.   public static void main(String[] args)
  58.   {
  59.     JFrame frame = new test();
  60.   }
  61.  
  62.   public test()
  63.   {
  64.     //init jogl
  65.     this.canvas = new GLCanvas(new GLCapabilities(GLProfile.getDefault()));
  66.     canvas.setIgnoreRepaint(true);
  67.     canvas.addGLEventListener(new GLHandler());
  68.  
  69.     //system settings
  70.     setIgnoreRepaint(true);
  71.     setResizable(false);
  72.     setSize(screenW , screenH);
  73.     setUndecorated(true);
  74.     setVisible(true);
  75.  
  76.     //customized initalization process and stuff
  77.     add(canvas);
  78.     validate();
  79.     this.run();
  80.   }
  81.  
  82.   public void run()
  83.   {
  84.     while(true)
  85.     {
  86.       canvas.display();
  87.       try //Sleep a bit, let other threads do their stuff
  88.       {
  89.         Thread.sleep(1);
  90.       }
  91.       catch(InterruptedException ex)
  92.       {
  93.         ex.printStackTrace();
  94.         System.exit(0);
  95.       }
  96.     }
  97.   }
  98.  
  99.   private double fps;
  100.   private long cycle;
  101.   private class GLHandler implements GLEventListener
  102.   {
  103.     public void display(GLAutoDrawable drawable)
  104.     {
  105.       System.out.println("Fps: " + fps + " " + cycle);
  106.       cycle++;
  107.         renderTime = System.nanoTime();
  108.         if(oldTime != 0 && renderTime != oldTime)
  109.           fps = fps*0.9 + 100000000/(renderTime - oldTime);
  110.         oldTime = renderTime;
  111.  
  112.       GL2 gl = drawable.getGL().getGL2();
  113.  
  114.       gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  115.  
  116.       gl.glDisable(GL_TEXTURE_2D);
  117.       //test OpenGL responsiveness
  118.       float[] color = new float[]{0.5f,0.25f +cycle%100/400f,0.25f+cycle%100/400f,1};
  119.       gl.glClearBufferfv(GL_COLOR , 0 , color , 0);
  120.  
  121.       gl.glUseProgram(shader);
  122.  
  123.       gl.glVertexAttrib2fv(0, new float[]{0 , 0} , 0);
  124.       gl.glVertexAttrib2fv(1, new float[]{0.25f + (cycle%2)*0.25f, 0} , 0);
  125.       gl.glVertexAttrib2fv(2, new float[]{0 , 0.5f} , 0);
  126.       gl.glVertexAttrib4fv(3, new float[]{0 , 1.0f*(cycle%128)/128f , 1.0f*(cycle%256)/256f , 1} , 0);
  127.  
  128.       // Draw one triangle
  129.       gl.glDrawArrays(GL_TRIANGLES, 0, 3);
  130.     }
  131.  
  132.     //Invoked when canvas is destroyed i.e. system exit. Nothing needing done.
  133.     public void dispose(GLAutoDrawable drawable)
  134.     {
  135.       drawable.getGL().getGL2().glDeleteProgram(shader);
  136.     }
  137.  
  138.     public void init(GLAutoDrawable drawable)
  139.     {
  140.       //Force v-sync.
  141.       drawable.getGL().setSwapInterval(1);
  142.  
  143.       //disable 3D
  144.       drawable.getGL().glDisable(GL_DEPTH_TEST);
  145.  
  146.       GL2 gl = drawable.getGL().getGL2();
  147.  
  148.       System.out.println(gl.glGetString(GL_SHADING_LANGUAGE_VERSION));
  149.  
  150.       //enable graphics space
  151.       gl.glEnable(GL_BLEND);
  152.       gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  153.  
  154.       //set screen size
  155.       gl.glViewport(0 , 0 , screenW , screenH);
  156.       gl.glMatrixMode(GL_PROJECTION);
  157.       gl.glLoadIdentity();
  158.  
  159.       //set ortho view
  160.       gl.glOrtho(0 , screenW , 0 , screenH , -1 , 1);
  161.       gl.glMatrixMode(GL_MODELVIEW);
  162.       gl.glLoadIdentity();
  163.  
  164.       //set screen default color
  165.       //gl.glClearColor(0.25f,0.25f,0.25f,1);
  166.  
  167.       int v = gl.glCreateShader(GL_VERTEX_SHADER);
  168.       gl.glShaderSource(v , vertexShader.length , vertexShader , new int[] { vertexShader[0].length() } , 0);
  169.       gl.glCompileShader(v);
  170.  
  171.       {
  172.         int[] compiled = new int[1];
  173.         gl.glGetShaderiv(v , GL_COMPILE_STATUS , compiled , 0);
  174.         if(compiled[0]!=0)
  175.           System.out.println("Horray! vertex shader compiled");
  176.         else
  177.         {
  178.           int[] logLength = new int[1];
  179.           gl.glGetShaderiv(v , GL_INFO_LOG_LENGTH, logLength , 0);
  180.          
  181.           byte[] log = new byte[logLength[0]];
  182.           gl.glGetShaderInfoLog(v , logLength[0] , (int[])null , 0 , log , 0);
  183.          
  184.           System.err.println("Error compiling the vertex shader: " + new String(log));
  185.           System.exit(1);
  186.         }
  187.       }
  188.  
  189.       int f = gl.glCreateShader(GL_FRAGMENT_SHADER);
  190.       gl.glShaderSource(f , fragShader.length , fragShader , new int[] { fragShader[0].length() } , 0);
  191.       gl.glCompileShader(f);
  192.  
  193.       {
  194.         int[] compiled = new int[1];
  195.         gl.glGetShaderiv(f , GL_COMPILE_STATUS , compiled , 0);
  196.         if(compiled[0]!=0)
  197.           System.out.println("Horray! frag shader compiled");
  198.         else
  199.         {
  200.           int[] logLength = new int[1];
  201.           gl.glGetShaderiv(f , GL_INFO_LOG_LENGTH, logLength , 0);
  202.          
  203.           byte[] log = new byte[logLength[0]];
  204.           gl.glGetShaderInfoLog(f , logLength[0] , (int[])null , 0 , log , 0);
  205.          
  206.           System.err.println("Error compiling the vertex shader: " + new String(log));
  207.           System.exit(1);
  208.         }
  209.       }
  210.  
  211.  
  212.       shader = gl.glCreateProgram();
  213.       gl.glAttachShader(shader , v);
  214.       gl.glAttachShader(shader , f);
  215.  
  216.       gl.glLinkProgram(shader);
  217.       gl.glValidateProgram(shader);
  218.  
  219.       gl.glDeleteShader(v);
  220.       gl.glDeleteShader(f);
  221.     }
  222.  
  223.     // called when user resizes the window. Never happen.
  224.     public void reshape(GLAutoDrawable drawable , int x , int y ,
  225.                         int width , int height) {}
  226.   }
  227. }
Advertisement
Add Comment
Please, Sign In to add comment