gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] gzz gfx/demo/xupdf.py gfx/jni/paper-jni.cxx gzz...


From: Tuomas J. Lukka
Subject: [Gzz-commits] gzz gfx/demo/xupdf.py gfx/jni/paper-jni.cxx gzz...
Date: Wed, 23 Oct 2002 15:50:19 -0400

CVSROOT:        /cvsroot/gzz
Module name:    gzz
Changes by:     Tuomas J. Lukka <address@hidden>        02/10/23 15:50:17

Modified files:
        gfx/demo       : xupdf.py 
        gfx/jni        : paper-jni.cxx 
        gzz/gfx/gl     : Paper.java 
        gzz/view       : pagespanview.py 

Log message:
        A LOT, LOT faster xupdf\! Render-paper-to-texture made an incredible 
difference...

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/demo/xupdf.py.diff?tr1=1.54&tr2=1.55&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/jni/paper-jni.cxx.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/gfx/gl/Paper.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gzz/view/pagespanview.py.diff?tr1=1.15&tr2=1.16&r1=text&r2=text

Patches:
Index: gzz/gfx/demo/xupdf.py
diff -u gzz/gfx/demo/xupdf.py:1.54 gzz/gfx/demo/xupdf.py:1.55
--- gzz/gfx/demo/xupdf.py:1.54  Sun Oct 20 05:33:17 2002
+++ gzz/gfx/demo/xupdf.py       Wed Oct 23 15:50:17 2002
@@ -8,6 +8,9 @@
 
 from jarray import array, zeros
 
+from gzz.view import pagespanview
+pagespanview.window = w
+
 # Now, this is the start of the REAL demo, the one
 # with Xanadu links between PDF and text.
 
Index: gzz/gfx/jni/paper-jni.cxx
diff -u gzz/gfx/jni/paper-jni.cxx:1.5 gzz/gfx/jni/paper-jni.cxx:1.6
--- gzz/gfx/jni/paper-jni.cxx:1.5       Tue Sep 24 04:14:08 2002
+++ gzz/gfx/jni/paper-jni.cxx   Wed Oct 23 15:50:17 2002
@@ -83,6 +83,14 @@
       env->ReleaseStringUTFChars(code, utf);
 }
 
+JNIEXPORT jstring JNICALL Java_gzz_gfx_gl_Paper_impl_1Pass_1getSetupcode
+  (JNIEnv *env, jclass, jint id, jint pass) {
+
+      string s = (*papers[id])[pass].setupcode.getSource();
+      return env->NewStringUTF(s.c_str());
+}
+
+
 JNIEXPORT void JNICALL Java_gzz_gfx_gl_Paper_impl_1Pass_1setTeardowncode
   (JNIEnv *env, jclass, jint id, jint pass, jstring code) {
       GLERR
@@ -94,6 +102,14 @@
 
       env->ReleaseStringUTFChars(code, utf);
 }
+
+JNIEXPORT jstring JNICALL Java_gzz_gfx_gl_Paper_impl_1Pass_1getTeardowncode
+  (JNIEnv *env, jclass, jint id, jint pass) {
+
+      string s = (*papers[id])[pass].teardowncode.getSource();
+      return env->NewStringUTF(s.c_str());
+}
+
 
 JNIEXPORT void JNICALL Java_gzz_gfx_gl_Paper_impl_1Pass_1putNormalTexGen
   (JNIEnv *env, jclass, jint id, jint pass, jint ind, jfloatArray arr) {
Index: gzz/gzz/gfx/gl/Paper.java
diff -u gzz/gzz/gfx/gl/Paper.java:1.5 gzz/gzz/gfx/gl/Paper.java:1.6
--- gzz/gzz/gfx/gl/Paper.java:1.5       Tue Sep 24 04:14:08 2002
+++ gzz/gzz/gfx/gl/Paper.java   Wed Oct 23 15:50:17 2002
@@ -51,7 +51,9 @@
        public void setNLightSetups(int n) { impl_Pass_setNLightSetups(c_id, 
index, n); }
 
        public void setSetupcode(String code) { impl_Pass_setSetupcode(c_id, 
index, code); }
+       public String getSetupcode() { return impl_Pass_getSetupcode(c_id, 
index); }
        public void setTeardowncode(String code) { 
impl_Pass_setTeardowncode(c_id, index, code); }
+       public String getTeardowncode() { return 
impl_Pass_getTeardowncode(c_id, index); }
 
        public void putNormalTexGen(int ind, float[] matrix) {
            impl_Pass_putNormalTexGen(c_id, index, ind, matrix);
@@ -93,7 +95,9 @@
     static private native void impl_Pass_setNLightSetups(int pid, int pass, 
int i);
 
     static private native void impl_Pass_setSetupcode(int pid, int pass, 
String code);
+    static private native String impl_Pass_getSetupcode(int pid, int pass);
     static private native void impl_Pass_setTeardowncode(int pid, int pass, 
String code);
+    static private native String impl_Pass_getTeardowncode(int pid, int pass);
 
     static private native void impl_Pass_putNormalTexGen(int pid, int pass, 
int ind, float[] matrix) ;
     static private native void impl_Pass_putEmbossTexGen(int pid, int pass, 
int ind, float[] matrix, float eps) ;
Index: gzz/gzz/view/pagespanview.py
diff -u gzz/gzz/view/pagespanview.py:1.15 gzz/gzz/view/pagespanview.py:1.16
--- gzz/gzz/view/pagespanview.py:1.15   Wed Oct 23 08:12:38 2002
+++ gzz/gzz/view/pagespanview.py        Wed Oct 23 15:50:17 2002
@@ -20,18 +20,26 @@
     list = enf.getList()
     return list[0]
 
+optimizedPaper = 1
+
 globalscrollblockPapers = {}
+
+window = None
+
 def getScrollblockPaper(sb):
     """Get the paper object for a given scrollblock.
     """
     hashkey = sb.hashCode() + globalseedoffs
     ret = globalscrollblockPapers.get(hashkey, None)
     if ret == None:
-       ret = papermill.getPaper(hashkey)
-       ret.setNPasses(3)
+       if optimizedPaper:
+           ret = papermill.getOptimizedPaper(hashkey, window)
+       else:
+           ret = papermill.getPaper(hashkey)
        globalscrollblockPapers[hashkey] = ret
     return ret
 
+
 def getPDFPapers(content):
     contentspan = enf2span(content)
     scrollblockPaper = getScrollblockPaper(contentspan.getScrollBlock())
@@ -56,7 +64,7 @@
     ph = pdfrect.h / 72.0 / 6
     wm = (pdfrect.x1-pdfrect.x0) / pw
     hm = (pdfrect.y1-pdfrect.y0) / ph
-    def mpap(blend, pap = None):
+    def mpap_general(blend, pap = None):
        if pap == None:
            pap = Paper()
            pap.setNPasses(1)
@@ -97,6 +105,66 @@
                                  0, 0,  1, 0,
                                  0, 0,  0, 1])
        return pap
+
+    if optimizedPaper:
+       def mpap(blend, pap = None):
+           if pap == None:
+               return mpap_general(blend, pap)
+           p = pap.getNPasses()
+           assert p == 1
+           ppass = pap.getPass(0)
+
+           texid = pdfrect.texId
+           ppass.setSetupcode(ppass.getSetupcode() +  nvcode.combinercode("""
+               ActiveTexture TEXTURE1
+               Enable TEXTURE_2D
+               BindTexture TEXTURE_2D %(texid)s
+               TexParameter TEXTURE_2D TEXTURE_WRAP_S REPEAT
+               TexParameter TEXTURE_2D TEXTURE_WRAP_T REPEAT
+               TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR
+               TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR
+               TexParameter TEXTURE_2D TEXTURE_MAX_ANISOTROPY_EXT 10
+               ActiveTexture TEXTURE0
+
+               Disable BLEND
+               Disable ALPHA_TEST
+
+               Enable REGISTER_COMBINERS_NV
+               CombinerParameterNV NUM_GENERAL_COMBINERS_NV 2
+
+               # 2*tex1 - 1  ->  spare0
+               CI0 RGB A TEXTURE1 EXPAND_NORMAL_NV RGB
+               CI0 RGB B ZERO UNSIGNED_INVERT_NV RGB
+               CI0 RGB C ZERO UNSIGNED_INVERT_NV RGB
+               CI0 RGB D ZERO EXPAND_NORMAL_NV RGB
+               CO0 RGB DISCARD_NV DISCARD_NV SPARE0_NV NONE NONE FALSE FALSE 
FALSE
+
+               # spare0 + tex0 -> spare1
+               CI1 RGB A TEXTURE0 UNSIGNED_IDENTITY_NV RGB
+               CI1 RGB B ZERO UNSIGNED_INVERT_NV RGB
+               CI1 RGB C SPARE0_NV SIGNED_IDENTITY_NV RGB
+               CI1 RGB D ZERO UNSIGNED_INVERT_NV RGB
+               CO1 RGB DISCARD_NV DISCARD_NV SPARE1_NV NONE NONE FALSE FALSE 
FALSE
+
+               FCI A SPARE1_NV UNSIGNED_IDENTITY_NV RGB
+               FCI B ZERO UNSIGNED_INVERT_NV RGB
+               FCI C ZERO UNSIGNED_IDENTITY_NV RGB
+               FCI D ZERO UNSIGNED_IDENTITY_NV RGB
+               FCI G ZERO UNSIGNED_IDENTITY_NV ALPHA
+
+               # Final color: simply just SPARE1
+           
+           """ % locals()))
+           ppass.setNTexGens(2)
+           ppass.putNormalTexGen(1, [wm, 0, 0, pdfrect.x0,
+                                     0, hm, 0, pdfrect.y0,
+                                     0, 0,  1, 0,
+                                     0, 0,  0, 1])
+           return pap
+    else:
+       mpap = mpap_general
+
+
     papw = mpap("BlendFunc SRC_COLOR ZERO")
     papo = mpap(nvcode.combinercode("""
        Enable REGISTER_COMBINERS_NV




reply via email to

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