gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] fenfire/org/fenfire/spanimages/gl DefaultSpanIm...


From: Tuomas J. Lukka
Subject: [Gzz-commits] fenfire/org/fenfire/spanimages/gl DefaultSpanIm...
Date: Tue, 24 Jun 2003 06:02:33 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Tuomas J. Lukka <address@hidden>        03/06/24 06:02:33

Modified files:
        org/fenfire/spanimages/gl: DefaultSpanImageFactory.java 
                                   PoolManager.java SingleImage.java 
                                   spanimages.test 

Log message:
        Ahh - plain paper from new API works

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/PoolManager.java.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/SingleImage.java.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/spanimages.test.diff?tr1=1.5&tr2=1.6&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java
diff -u fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java:1.5 
fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java:1.6
--- fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java:1.5  Mon Jun 
23 10:02:50 2003
+++ fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java      Tue Jun 
24 06:02:33 2003
@@ -87,8 +87,8 @@
        if(pixReso <= 0)
            pixReso = 1;
 
-       float xscale = x1 * largest.width / pixReso;
-       float yscale = y1 * largest.height / pixReso;
+       float xscale = 1f / largest.width / pixReso;
+       float yscale = 1f / largest.height / pixReso;
 
        Point p =s.getLocation();
        Dimension ps =s.getSize();
@@ -103,6 +103,8 @@
            0,       0,                 1,   0,
            0,       0,                 0,   1
        };
+       if(dbg) p("Texgen quants: "+xscale+" "+yscale+" "+xoffs+" "+yoffs);
+       if(dbg) p("sizes: "+ps.width+" "+ps.height+" "+d.width+" "+d.height);
 
        Paper paper = paperMaker.makePaper(singleImage, texgen);
 
@@ -110,8 +112,8 @@
                    singleImage,
                    paper,
                    texgen,
-                   ps.width / (float)d.width * largest.width * pixReso,
-                   ps.height / (float)d.height * largest.height * pixReso);
+                   ps.width / (float)d.width * x1 / xscale,
+                   ps.height / (float)d.height * y1 / yscale);
 
     }
 }
Index: fenfire/org/fenfire/spanimages/gl/PoolManager.java
diff -u fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.4 
fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.5
--- fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.4      Mon Jun 23 
10:19:33 2003
+++ fenfire/org/fenfire/spanimages/gl/PoolManager.java  Tue Jun 24 06:02:33 2003
@@ -48,6 +48,7 @@
     class MySIV extends AbstractVob implements SpanImageVob {
        float w, h;
        GLRen.FixedPaperQuad quad;
+       SingleImage img; // We don't want to GC it before the SIV!
        public float getWidth() { return w; };
        public float getHeight() { return h; };
 
@@ -78,6 +79,10 @@
        MySIV siv = new MySIV();
        siv.w = w;
        siv.h = h;
+       siv.img = i;
+
+       if(dbg) 
+           p("Makevob: "+mult+" "+w+" "+h);
        siv.quad = GLRen.createFixedPaperQuad(
                    p, 0, 0, w, h, 0,
                    DICELENGTH, DICELENGTH2, DICEDEPTH,
@@ -94,7 +99,6 @@
        activeSet.add(singleImage);
     }
 
-    SingleImage[] templ = new SingleImage[0];
 
     Comparator sortPriority = new Comparator() {
        public int compare(Object o1, Object o2) {
@@ -106,8 +110,30 @@
        }
     };
 
+    Thread bgThread = new Thread() {
+       public void run() {
+           while(true) {
+               try {
+                   Thread.sleep(1000);
+                   updateAllocs();
+               } catch(Exception e) {
+                   e.printStackTrace();
+                   System.err.println("Alloc exception "+e);
+               }
+           }
+       }
+    };
+
+    {
+       bgThread.setDaemon(true);
+       bgThread.setPriority(Thread.MIN_PRIORITY);
+       bgThread.start();
+    }
+
+    SingleImage[] templ = new SingleImage[0];
     public void updateAllocs() {
-       SingleImage[] actives = (SingleImage[])activeSet.toArray();
+       SingleImage[] actives = (SingleImage[])activeSet.toArray(templ);
+       if(dbg) p("UpdateAllocs start "+actives.length);
        Arrays.sort(actives, sortPriority);
        int left = POOLSIZE;
        long time = System.currentTimeMillis();
@@ -116,7 +142,9 @@
        }
        for(int i=0; i<actives.length; i++) {
            int l = 0;
-           for(; l < actives[i].missingPixels.length; i++) {
+           if(dbg) p("Loop: "+i+" "+actives.length);
+           for(; l < actives[i].missingPixels.length; l++) {
+               p("l "+l+"  miss: "+actives[i].missingPixels[l]);
                if(actives[i].missingPixels[l] > .15 * actives[i].nPixels()) {
                    l--; 
                    break;
@@ -129,6 +157,7 @@
                l++;
 
            left -= actives[i].loader.getMemory(l);
+           if(dbg) p("Setgoal: "+actives[i]+" "+l);
            actives[i].loader.setGoalBaseLevel(l,
                            Background.getDefaultInstance(),
                            (float)(10 + .1 * i));
Index: fenfire/org/fenfire/spanimages/gl/SingleImage.java
diff -u fenfire/org/fenfire/spanimages/gl/SingleImage.java:1.6 
fenfire/org/fenfire/spanimages/gl/SingleImage.java:1.7
--- fenfire/org/fenfire/spanimages/gl/SingleImage.java:1.6      Mon Jun 23 
10:19:33 2003
+++ fenfire/org/fenfire/spanimages/gl/SingleImage.java  Tue Jun 24 06:02:33 2003
@@ -57,7 +57,7 @@
     /** Decay coefficient.
      * Coefficient C for exp(- C*(t1-t0)) when decaying.
      */
-    public static float exponentialCoeff;
+    public static float exponentialCoeff = (float)Math.log(.5) / 2000;
 
 
     public final String scrollBlock;
@@ -102,11 +102,19 @@
      */
     public synchronized void readTexAccum() {
        double nnow = 0;
-       for(int i=0; i<missingPixels.length; i++) {
-           nnow += accum.get(i);
-           missingPixels[missingPixels.length-1 - i] += nnow;
+       // accum: 0 = n of pixels rendered where whole texcoord is in one pixel
+       // accum: 1 = n of pixels rendered where whole texcoord is in four 
pixels
+       // ...
+       // missingPixels: 0 = n of pixels too inaccurate at level 0
+       //                1 = n of pixels too inaccurate at level 1
+       for(int i=19; i>=0; i--) { // magic no: accum size
+           double ac = accum.get(i);
+           nnow += ac;
+           if(dbg) p("Accum: "+i+" "+ac);
+           if(missingPixels.length-1-i >= 0)
+               missingPixels[missingPixels.length-1 - i] += nnow;
        }
-       if(dbg) p("SingleImage: readTexAccum - total: "+nnow);
+       if(dbg) p("SingleImage: readTexAccum - total: "+nnow+" "+nPixels());
        accum.clear();
     }
 
@@ -114,11 +122,12 @@
      */
     public synchronized void updateTime(long curTime) {
        double msecs = curTime - lastUpdate;
-       lastUpdate = curTime;
        double mul = Math.exp(- exponentialCoeff * msecs);
        for(int i=0; i<missingPixels.length; i++)
            missingPixels[i] *= mul;
-       if(dbg) p("SingleImage: updateTime- totalnow: "+nPixels());
+       if(dbg) p("SingleImage: updateTime- "+lastUpdate+" "+curTime+
+                       " mul: "+mul+"  totalnow: "+nPixels());
+       lastUpdate = curTime;
     }
 
 }
Index: fenfire/org/fenfire/spanimages/gl/spanimages.test
diff -u fenfire/org/fenfire/spanimages/gl/spanimages.test:1.5 
fenfire/org/fenfire/spanimages/gl/spanimages.test:1.6
--- fenfire/org/fenfire/spanimages/gl/spanimages.test:1.5       Mon Jun 23 
10:53:23 2003
+++ fenfire/org/fenfire/spanimages/gl/spanimages.test   Tue Jun 24 06:02:33 2003
@@ -79,12 +79,19 @@
     if dbg:
        print "len",sc.getCurrent().length()
     assert sc.getCurrent().length() == 2
+    sz =  sc.getPage(0).getSize()
+    assert sz.width == 595
+    assert sz.height == 842
 
 
 def checkPaper(spanImageFactory, blank):
 
     spanImageVob = spanImageFactory.getSpanImageVob(
                        sc.getCurrent().getPage(0))
+
+    assert 615 < spanImageVob.getWidth() < 625
+    assert 870 < spanImageVob.getHeight() < 880
+
     vs = gfx.getvs()
     vs.map.put(vob.vobs.SolidBackdropVob(java.awt.Color.yellow))
 
@@ -93,7 +100,7 @@
 
     vs.map.put(spanImageVob, pcs)
 
-    for i in range(0, 30):
+    for i in range(0, 10):
        for j in range(0, 20):
            # Have to do by hand - no abstractupdatemanager loop
            vob.AbstractUpdateManager.tickIdle()
@@ -107,7 +114,7 @@
                checkNonBlank()
            return
 
-       java.lang.Thread.sleep(100)
+       java.lang.Thread.sleep(1000)
 
     
 
@@ -152,7 +159,6 @@
 def testPlainPaper():
     """Test that plain paper renders right.
 
-    fail: *
     """
     # The defaults are such that 
     spanImageFactory = spim.DefaultSpanImageFactory(




reply via email to

[Prev in Thread] Current Thread [Next in Thread]