View difference between Paste ID: Lcz9MmZ8 and LVSXvxwz
SHOW: | | - or go back to the newest paste.
1
import java.awt.AlphaComposite;
2
import java.awt.BasicStroke;
3
import java.awt.Color;
4
import java.awt.Font;
5
import java.awt.FontMetrics;
6
import java.awt.Graphics2D;
7
import java.awt.RenderingHints;
8
import java.awt.Shape;
9
import java.awt.font.GlyphVector;
10
import java.awt.font.FontRenderContext;
11
import java.awt.font.TextLayout;
12
import java.awt.image.BufferedImage;
13
import java.io.File;
14
import javax.imageio.ImageIO;
15
import javax.swing.JFrame;
16
import javax.swing.SwingUtilities;
17
18
import com.jogamp.opengl.util.texture.Texture;
19
import com.jogamp.opengl.util.texture.awt.AWTTextureIO;
20
import javax.media.opengl.GL2;
21
import javax.media.opengl.GLAutoDrawable;
22
import javax.media.opengl.GLCapabilities;
23
import javax.media.opengl.GLDrawable;
24
import javax.media.opengl.GLEventListener;
25
import javax.media.opengl.GLProfile;
26
import javax.media.opengl.awt.GLCanvas;
27
import static javax.media.opengl.GL2.*;
28
29
import java.awt.Frame;
30
import java.awt.event.WindowAdapter;
31
import java.awt.event.WindowEvent;
32
import javax.media.opengl.*;
33
import javax.media.opengl.awt.GLCanvas;
34
import com.jogamp.opengl.util.*;
35
36
public class test implements GLEventListener {
37
38
    private double theta = 0;
39
    private double s = 0;
40
    private double c = 0;
41
42
    public static void main(String[] args) {
43
        GLProfile glp = GLProfile.getDefault();
44
        GLCapabilities caps = new GLCapabilities(glp);
45
        GLCanvas canvas = new GLCanvas(caps);
46
47
        Frame frame = new Frame("AWT Window Test");
48
        frame.setSize(300, 300);
49
        frame.add(canvas);
50
        frame.setVisible(true);
51
52
        frame.addWindowListener(new WindowAdapter() {
53
            public void windowClosing(WindowEvent e) {
54
                System.exit(0);
55
            }
56
        });
57
58
        canvas.addGLEventListener(new test());
59
60
        FPSAnimator animator = new FPSAnimator(canvas, 60);
61
        animator.start();
62
    }
63
64
  public static long oldTime;
65
66
  public static long renderTime;
67
68-
  private final int screenW = 800 , screenH = 600;
68+
  private final int screenW = 1000 , screenH = 1000;
69
70
  /**
71
   * Serial version ID
72
   */
73
  static final long serialVersionUID = 20090529;
74
75
  public static final String[] fragShader = new String[] {
76
    "#version 330 core\n" +
77
    "in vec4 fragColor;\n" +
78
    "out vec4 color;\n" +
79
    "void main(void)\n" +
80
    "{\n" +
81
    "  color = fragColor;\n" +
82
    "}"};
83
  public static final String[] vertexShader = new String[] {
84
    "#version 330 core\n" +
85
    "layout (location = 0) in vec2 p0;\n" +
86
    "layout (location = 1) in vec2 p1;\n" +
87
    "layout (location = 2) in vec2 p2;\n" +
88
    "layout (location = 3) in vec4 color;\n" +
89
    "out vec4 fragColor;\n" +
90
    "void main(void)\n" +
91
    "{\n" +
92
    "  if(gl_VertexID == 0)\n" +
93
    "    gl_Position.xy = p0;\n" +
94
    "  else if(gl_VertexID == 1)\n" +
95
    "    gl_Position.xy = p1;\n" +
96
    "  else if(gl_VertexID == 2)\n" +
97
    "    gl_Position.xy = p2;\n" +
98
    "  gl_Position.z = 0;\n" +
99
    "  gl_Position.w = 1;\n" +
100
    "  fragColor = color;\n" +
101
    "}"};
102
103
  private int shader;
104
105
  public static final Font font = new Font("Arial" , Font.PLAIN , 40);
106
  private double fps;
107
  private Texture text;
108
  private long cycle;
109
110
  public void display(GLAutoDrawable drawable)
111
  {
112
    System.out.println("Fps: " + fps + " " + cycle);
113
    cycle++;
114
      renderTime = System.nanoTime();
115
      if(oldTime != 0 && renderTime != oldTime)
116
        fps = fps*0.9 + 100000000/(renderTime - oldTime);
117
      oldTime = renderTime;
118
119
    GL2 gl = drawable.getGL().getGL2();
120
121
    gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
122
123
    gl.glDisable(GL_TEXTURE_2D);
124
    float[] color = new float[]{0, 0.5f + cycle%100/200f ,0.5f + cycle%100/200f,1};
125
    gl.glClearBufferfv(GL_COLOR , 0 , color , 0);
126
127
    gl.glUseProgram(shader);
128
129
    gl.glVertexAttrib2fv(0, new float[]{0 , 0} , 0);
130-
    gl.glVertexAttrib2fv(1, new float[]{0.25f + (cycle%2)*0.25f, 0} , 0);
130+
    gl.glVertexAttrib2fv(1, new float[]{0.25f + cycle%2/4f, 0} , 0);
131-
    gl.glVertexAttrib2fv(2, new float[]{0 , 0.5f} , 0);
131+
    gl.glVertexAttrib2fv(2, new float[]{0 , 0.25f + (cycle+1)%2/4f} , 0);
132-
    gl.glVertexAttrib4fv(3, new float[]{0 , 1.0f*(cycle%256)/256f , 1.0f*(cycle%256)/256f , 1} , 0);
132+
    gl.glVertexAttrib4fv(3, new float[]{0.5f + cycle%100/200f , 0.5f + cycle%100/200f , 0 , 1} , 0);
133
134
135
// Draw one triangle
136
gl.glDrawArrays(GL_TRIANGLES, 0, 3);
137
          gl.glScalef(2.0f,-0.5f,1.0f);
138
  }
139
140
  //Invoked when canvas is destroyed i.e. system exit. Nothing needing done.
141
  public void dispose(GLAutoDrawable drawable)
142
  {
143
    drawable.getGL().getGL2().glDeleteProgram(shader);
144
  }
145
146
  public void init(GLAutoDrawable drawable)
147
  {
148
    //Force v-sync.
149
    drawable.getGL().setSwapInterval(1);
150
151
    //disable 3D
152
    drawable.getGL().glDisable(GL_DEPTH_TEST);
153
154
    GL2 gl = drawable.getGL().getGL2();
155
156
    System.out.println(gl.glGetString(GL_SHADING_LANGUAGE_VERSION));
157
158
    //enable graphics space
159
    gl.glEnable(GL_BLEND);
160
    gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
161
162
    //set screen size
163
    gl.glViewport(0 , 0 , screenW , screenH);
164
    gl.glMatrixMode(GL_PROJECTION);
165
    gl.glLoadIdentity();
166
167
    //set ortho view
168
    gl.glOrtho(0 , screenW , 0 , screenH , -1 , 1);
169
    gl.glMatrixMode(GL_MODELVIEW);
170
    gl.glLoadIdentity();
171
172
    //set screen default color
173
    //gl.glClearColor(0.25f,0.25f,0.25f,1);
174
175
    int v = gl.glCreateShader(GL_VERTEX_SHADER);
176
    gl.glShaderSource(v , vertexShader.length , vertexShader , new int[] { vertexShader[0].length() } , 0);
177
    gl.glCompileShader(v);
178
179
    {
180
      int[] compiled = new int[1];
181
      gl.glGetShaderiv(v , GL_COMPILE_STATUS , compiled , 0);
182
      if(compiled[0]!=0)
183
        System.out.println("Horray! vertex shader compiled");
184
      else
185
      {
186
        int[] logLength = new int[1];
187
        gl.glGetShaderiv(v , GL_INFO_LOG_LENGTH, logLength , 0);
188
        
189
        byte[] log = new byte[logLength[0]];
190
        gl.glGetShaderInfoLog(v , logLength[0] , (int[])null , 0 , log , 0);
191
        
192
        System.err.println("Error compiling the vertex shader: " + new String(log));
193
        System.exit(1);
194
      }
195
    }
196
197
    int f = gl.glCreateShader(GL_FRAGMENT_SHADER);
198
    gl.glShaderSource(f , fragShader.length , fragShader , new int[] { fragShader[0].length() } , 0);
199
    gl.glCompileShader(f);
200
201
    {
202
      int[] compiled = new int[1];
203
      gl.glGetShaderiv(f , GL_COMPILE_STATUS , compiled , 0);
204
      if(compiled[0]!=0)
205
        System.out.println("Horray! frag shader compiled");
206
      else
207
      {
208
        int[] logLength = new int[1];
209
        gl.glGetShaderiv(f , GL_INFO_LOG_LENGTH, logLength , 0);
210
        
211
        byte[] log = new byte[logLength[0]];
212
        gl.glGetShaderInfoLog(f , logLength[0] , (int[])null , 0 , log , 0);
213
        
214
        System.err.println("Error compiling the vertex shader: " + new String(log));
215
        System.exit(1);
216
      }
217
    }
218
219
220
    shader = gl.glCreateProgram();
221
    gl.glAttachShader(shader , v);
222
    gl.glAttachShader(shader , f);
223
224
    gl.glLinkProgram(shader);
225
    gl.glValidateProgram(shader);
226
227
    gl.glDeleteShader(v);
228
    gl.glDeleteShader(f);
229
  }
230
231
  // called when user resizes the window. Never happen.
232
  public void reshape(GLAutoDrawable drawable , int x , int y ,
233
                      int width , int height) {}
234
}