示例#1
0
  void redraw(GL2 gl) {
    if (uncaught != null)
      throw (new RuntimeException(
          "Exception occurred during init but was somehow discarded", uncaught));
    if ((state == null) || (state.cgl.gl != gl))
      state = new GLState.Applier(new CurrentGL(gl, glconf));

    Frame f;
    synchronized (curdraw) {
      f = curdraw[0];
      curdraw[0] = null;
    }
    if ((f != null) && (f.on.gl == gl)) {
      GPUProfile.Frame curgf = null;
      if (Config.profilegpu) curgf = gprof.new Frame((GL3) gl);
      if (f.pf != null) f.pf.tick("awt");
      f.buf.run(gl);
      GOut.checkerr(gl);
      if (f.pf != null) f.pf.tick("gl");
      if (curgf != null) {
        curgf.tick("draw");
        curgf.fin();
      }

      if (glconf.pref.dirty) {
        glconf.pref.save();
        glconf.pref.dirty = false;
      }
      f.doneat = System.currentTimeMillis();
    }
  }
示例#2
0
文件: GOut.java 项目: krvd/hnh_union
 public void atext(String text, Coord c, double ax, double ay) {
   Text t = Text.render(text);
   Tex T = t.tex();
   Coord sz = t.sz();
   image(T, c.add((int) ((double) sz.x * -ax), (int) ((double) sz.y * -ay)));
   T.dispose();
   checkerr();
 }
示例#3
0
 public void poly(Coord... c) {
   st.set(cur2d);
   apply();
   gl.glBegin(GL2.GL_POLYGON);
   for (Coord vc : c) vertex(vc);
   gl.glEnd();
   checkerr();
 }
示例#4
0
 private void create(GOut g) {
   BGL gl = g.gl;
   t = new TexOb(g);
   gl.glBindTexture(GL.GL_TEXTURE_CUBE_MAP, t);
   gl.glTexParameteri(GL.GL_TEXTURE_CUBE_MAP, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
   gl.glTexParameteri(GL.GL_TEXTURE_CUBE_MAP, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
   fill(g);
   checkerr(gl);
 }
示例#5
0
 public void line(Coord c1, Coord c2, double w) {
   st.set(cur2d);
   apply();
   gl.glLineWidth((float) w);
   gl.glBegin(GL.GL_LINES);
   vertex(c1);
   vertex(c2);
   gl.glEnd();
   checkerr();
 }
示例#6
0
文件: GOut.java 项目: krvd/hnh_union
 public void line(Coord c1, Coord c2, double w) {
   texsel(-1);
   gl.glLineWidth((float) w);
   gl.glBegin(GL.GL_LINES);
   glcolor();
   vertex(c1);
   vertex(c2);
   gl.glEnd();
   checkerr();
 }
示例#7
0
文件: GOut.java 项目: krvd/hnh_union
 public void frect(Coord ul, Coord sz) {
   glcolor();
   texsel(-1);
   gl.glBegin(GL.GL_QUADS);
   vertex(ul);
   vertex(ul.add(new Coord(sz.x, 0)));
   vertex(ul.add(sz));
   vertex(ul.add(new Coord(0, sz.y)));
   gl.glEnd();
   checkerr();
 }
示例#8
0
 public void frect(Coord c1, Coord c2, Coord c3, Coord c4) {
   st.set(cur2d);
   apply();
   gl.glBegin(GL2.GL_QUADS);
   vertex(c1);
   vertex(c2);
   vertex(c3);
   vertex(c4);
   gl.glEnd();
   checkerr();
 }
示例#9
0
文件: GOut.java 项目: krvd/hnh_union
 public void frect(Coord c1, Coord c2, Coord c3, Coord c4) {
   glcolor();
   texsel(-1);
   gl.glBegin(GL.GL_QUADS);
   vertex(c1);
   vertex(c2);
   vertex(c3);
   vertex(c4);
   gl.glEnd();
   checkerr();
 }
示例#10
0
 /* Draw texture at c, clipping everything outside ul to ul + sz. */
 public void image(Tex tex, Coord c, Coord ul, Coord sz) {
   if (tex == null) return;
   st.set(cur2d);
   ul = ul.add(this.tx);
   Coord br = ul.add(sz);
   if (ul.x < this.ul.x) ul.x = this.ul.x;
   if (ul.y < this.ul.y) ul.y = this.ul.y;
   if (br.x > this.ul.x + this.sz.x) br.x = this.ul.x + this.sz.x;
   if (br.y > this.ul.y + this.sz.y) br.y = this.ul.y + this.sz.y;
   tex.crender(this, c.add(this.tx), ul, br.sub(ul));
   checkerr();
 }
示例#11
0
 public void rect(Coord ul, Coord sz) {
   st.set(cur2d);
   apply();
   gl.glLineWidth(1);
   gl.glBegin(GL.GL_LINE_LOOP);
   vertex(ul.x + 0.5f, ul.y + 0.5f);
   vertex(ul.x + sz.x - 0.5f, ul.y + 0.5f);
   vertex(ul.x + sz.x - 0.5f, ul.y + sz.y - 0.5f);
   vertex(ul.x + 0.5f, ul.y + sz.y - 0.5f);
   gl.glEnd();
   checkerr();
 }
示例#12
0
 public void fellipse(Coord c, Coord r, int a1, int a2) {
   st.set(cur2d);
   apply();
   gl.glBegin(GL.GL_TRIANGLE_FAN);
   vertex(c);
   for (int i = a1; i <= a2; i += 5) {
     double a = (i * Math.PI * 2) / 360.0;
     vertex(c.add((int) (Math.cos(a) * r.x), -(int) (Math.sin(a) * r.y)));
   }
   gl.glEnd();
   checkerr();
 }
示例#13
0
  public void prect(Coord c, Coord ul, Coord br, double a) {
    st.set(cur2d);
    apply();
    gl.glEnable(GL2.GL_POLYGON_SMOOTH);
    gl.glBegin(GL.GL_TRIANGLE_FAN);
    vertex(c);
    vertex(c.add(0, ul.y));
    double p2 = Math.PI / 2;
    all:
    {
      float tc;

      tc = (float) (Math.tan(a) * -ul.y);
      if ((a > p2) || (tc > br.x)) {
        vertex(c.x + br.x, c.y + ul.y);
      } else {
        vertex(c.x + tc, c.y + ul.y);
        break all;
      }

      tc = (float) (Math.tan(a - (Math.PI / 2)) * br.x);
      if ((a > p2 * 2) || (tc > br.y)) {
        vertex(c.x + br.x, c.y + br.y);
      } else {
        vertex(c.x + br.x, c.y + tc);
        break all;
      }

      tc = (float) (-Math.tan(a - Math.PI) * br.y);
      if ((a > p2 * 3) || (tc < ul.x)) {
        vertex(c.x + ul.x, c.y + br.y);
      } else {
        vertex(c.x + tc, c.y + br.y);
        break all;
      }

      tc = (float) (-Math.tan(a - (3 * Math.PI / 2)) * -ul.x);
      if ((a > p2 * 4) || (tc < ul.y)) {
        vertex(c.x + ul.x, c.y + ul.y);
      } else {
        vertex(c.x + ul.x, c.y + tc);
        break all;
      }

      tc = (float) (Math.tan(a) * -ul.y);
      vertex(c.x + tc, c.y + ul.y);
    }
    gl.glEnd();
    gl.glDisable(GL2.GL_POLYGON_SMOOTH);
    checkerr();
  }
示例#14
0
文件: GOut.java 项目: krvd/hnh_union
 public void fellipse(Coord c, Coord r, int a1, int a2) {
   glcolor();
   texsel(-1);
   gl.glBegin(GL.GL_TRIANGLE_FAN);
   vertex(c);
   for (int i = a1; i < a2; i += 5) {
     double a = (i * Math.PI * 2) / 360.0;
     vertex(c.add((int) (Math.cos(a) * r.x), -(int) (Math.sin(a) * r.y)));
   }
   double a = (a2 * Math.PI * 2) / 360.0;
   vertex(c.add((int) (Math.cos(a) * r.x), -(int) (Math.sin(a) * r.y)));
   gl.glEnd();
   checkerr();
 }
示例#15
0
 public void frect(Coord ul, Coord sz) {
   ul = tx.add(ul);
   Coord br = ul.add(sz);
   if (ul.x < this.ul.x) ul.x = this.ul.x;
   if (ul.y < this.ul.y) ul.y = this.ul.y;
   if (br.x > this.ul.x + this.sz.x) br.x = this.ul.x + this.sz.x;
   if (br.y > this.ul.y + this.sz.y) br.y = this.ul.y + this.sz.y;
   if ((ul.x >= br.x) || (ul.y >= br.y)) return;
   st.set(cur2d);
   apply();
   gl.glBegin(GL2.GL_QUADS);
   gl.glVertex2i(ul.x, ul.y);
   gl.glVertex2i(br.x, ul.y);
   gl.glVertex2i(br.x, br.y);
   gl.glVertex2i(ul.x, br.y);
   gl.glEnd();
   checkerr();
 }
示例#16
0
 public void poly2(Object... c) {
   st.set(cur2d);
   st.put(States.color, States.vertexcolor);
   apply();
   gl.glBegin(GL2.GL_POLYGON);
   for (int i = 0; i < c.length; i += 2) {
     Coord vc = (Coord) c[i];
     Color col = (Color) c[i + 1];
     gl.glColor4f(
         (col.getRed() / 255.0f),
         (col.getGreen() / 255.0f),
         (col.getBlue() / 255.0f),
         (col.getAlpha() / 255.0f));
     vertex(vc);
   }
   gl.glEnd();
   checkerr();
 }
示例#17
0
文件: GOut.java 项目: krvd/hnh_union
 public void ftriangle(Coord center, int size) {
   if (size < 1) return;
   double sqrt3 = Math.sqrt(3);
   double Orad = (sqrt3 * size) / 3;
   double Irad = (sqrt3 * size) / 6;
   Coord c1, c2, c3;
   c1 = new Coord(center.x, center.y - (int) Orad);
   c2 = new Coord(center.x + (int) (size / 2) - 1, center.y + (int) Irad);
   c3 = new Coord(center.x - (int) (size / 2) + 1, center.y + (int) Irad);
   glcolor();
   texsel(-1);
   gl.glBegin(GL.GL_TRIANGLE_STRIP);
   vertex(c1);
   vertex(c2);
   vertex(c3);
   gl.glEnd();
   checkerr();
 }
示例#18
0
  public void ftexrect(Coord ul, Coord sz, GLState s, float tl, float tt, float tr, float tb) {
    ul = tx.add(ul);
    Coord br = ul.add(sz);
    Coord ult = new Coord(0, 0);
    Coord brt = new Coord(sz);
    if (ul.x < this.ul.x) {
      ult.x += this.ul.x - ul.x;
      ul.x = this.ul.x;
    }
    if (ul.y < this.ul.y) {
      ult.y += this.ul.y - ul.y;
      ul.y = this.ul.y;
    }
    if (br.x > this.ul.x + this.sz.x) {
      brt.x -= br.x - (this.ul.x + this.sz.x);
      br.x = this.ul.x + this.sz.x;
    }
    if (br.y > this.ul.y + this.sz.y) {
      brt.y -= br.y - (this.ul.y + this.sz.y);
      br.y = this.ul.y + this.sz.y;
    }
    if ((ul.x >= br.x) || (ul.y >= br.y)) return;

    st.set(cur2d);
    state(s);
    apply();

    float l = tl + ((tr - tl) * ((float) ult.x) / ((float) sz.x));
    float t = tt + ((tb - tt) * ((float) ult.y) / ((float) sz.y));
    float r = tl + ((tr - tl) * ((float) brt.x) / ((float) sz.x));
    float b = tt + ((tb - tt) * ((float) brt.y) / ((float) sz.y));
    gl.glBegin(GL2.GL_QUADS);
    gl.glTexCoord2f(l, b);
    gl.glVertex2i(ul.x, ul.y);
    gl.glTexCoord2f(r, b);
    gl.glVertex2i(br.x, ul.y);
    gl.glTexCoord2f(r, t);
    gl.glVertex2i(br.x, br.y);
    gl.glTexCoord2f(l, t);
    gl.glVertex2i(ul.x, br.y);
    gl.glEnd();
    checkerr();
  }
示例#19
0
  void redraw(GL2 gl) {
    if ((state == null) || (state.cgl.gl != gl))
      state = new GLState.Applier(new CurrentGL(gl, glconf));

    Frame f = curdraw;
    if ((f != null) && (f.on.gl == gl)) {
      GPUProfile.Frame curgf = null;
      if (Config.profilegpu) curgf = gprof.new Frame((GL3) gl);
      if (f.pf != null) f.pf.tick("awt");
      f.buf.run(gl);
      GOut.checkerr(gl);
      if (f.pf != null) f.pf.tick("gl");
      if (curgf != null) {
        curgf.tick("draw");
        curgf.fin();
      }

      if (glconf.pref.dirty) {
        glconf.pref.save();
        glconf.pref.dirty = false;
      }
      f.doneat = System.currentTimeMillis();
    }
  }
示例#20
0
 public ShaderOb(GL2 gl, int type) {
   super(gl);
   id = gl.glCreateShaderObjectARB(type);
   GOut.checkerr(gl);
 }
示例#21
0
 /* Draw texture at c, with the extra state s applied. */
 public void image(Tex tex, Coord c, GLState s) {
   st.set(cur2d);
   if (s != null) state(s);
   tex.crender(this, c.add(tx), ul, sz);
   checkerr();
 }
示例#22
0
文件: GOut.java 项目: krvd/hnh_union
 public void image(Tex tex, Coord c, Coord ul, Coord sz) {
   if (tex == null) return;
   tex.crender(this, c.add(this.ul), this.ul.add(ul), sz);
   checkerr();
 }
示例#23
0
文件: GOut.java 项目: krvd/hnh_union
 private void checkerr() {
   checkerr(gl);
 }
示例#24
0
 /* Draw texture at c, scaling it to sz. */
 public void image(Tex tex, Coord c, Coord sz) {
   if (tex == null) return;
   st.set(cur2d);
   tex.crender(this, c.add(tx), ul, this.sz, sz);
   checkerr();
 }