[Top][All Lists]
[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(