gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] gzz ./TODO gfx/demo/irregu4.py gfx/librenderabl...


From: Janne V. Kujala
Subject: [Gzz-commits] gzz ./TODO gfx/demo/irregu4.py gfx/librenderabl...
Date: Sat, 30 Nov 2002 08:10:23 -0500

CVSROOT:        /cvsroot/gzz
Module name:    gzz
Changes by:     Janne V. Kujala <address@hidden>        02/11/30 08:10:23

Modified files:
        .              : TODO 
        gfx/demo       : irregu4.py 
        gfx/librenderables: renderables.py 

Log message:
        try 2D offset texture

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/TODO.diff?tr1=1.428&tr2=1.429&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/demo/irregu4.py.diff?tr1=1.25&tr2=1.26&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/librenderables/renderables.py.diff?tr1=1.157&tr2=1.158&r1=text&r2=text

Patches:
Index: gzz/TODO
diff -u gzz/TODO:1.428 gzz/TODO:1.429
--- gzz/TODO:1.428      Fri Nov 29 09:18:45 2002
+++ gzz/TODO    Sat Nov 30 08:10:23 2002
@@ -29,6 +29,7 @@
     tjl, jvk:
        - paper: small high-frequency components
        + [GI03] standard GL implementation of irregu
+                   - try offset texture
                    - !!! borders for paperquads; 
                      Perhaps should add "ZVec CoordSys::grad(const ZPt)"
                      or simply directional derivative for determining 
Index: gzz/gfx/demo/irregu4.py
diff -u gzz/gfx/demo/irregu4.py:1.25 gzz/gfx/demo/irregu4.py:1.26
--- gzz/gfx/demo/irregu4.py:1.25        Sat Nov 30 05:06:37 2002
+++ gzz/gfx/demo/irregu4.py     Sat Nov 30 08:10:23 2002
@@ -40,7 +40,7 @@
 ripple_scale = 0.25
 
 def inittex():
-    global texRGBA, texINTENSITY
+    global texRGBA, texINTENSITY, texHILO, texBOX, offsetprog
 
     texRGBA = getCachedTexture(
         [128, 128, 0, 4, "RGBA", "RGBA", "irregu",
@@ -62,6 +62,39 @@
            ]],
         shade_all_levels = 1)
 
+    if GL.hasExtension("GL_NV_texture_shader"):
+        if GL.hasExtension("GL_NV_texture_shader3"):
+            internal = "SIGNED_HILO_NV"
+            format = "HILO_NV"
+            offsetprog = "OFFSET_HILO_TEXTURE_2D_NV"
+        else:
+            internal = "DSDT_NV"
+            format = "DSDT_NV"
+            offsetprog = "OFFSET_TEXTURE_2D_NV"
+        
+        texHILO = getCachedTexture(
+            [128, 128, 0, 1, internal, format, "irregu",
+             [ "texture", textures[0][0],
+               "params", textures[0][1],
+               "ripple_scale", str(ripple_scale),
+               "scale", "2",
+               "bias", "-1",
+               ]]
+            )
+        if not globals().has_key("texBOX") or 1:
+            texBOX = GL.createTexture()
+            GL.call("""
+            BindTexture TEXTURE_2D %s
+            TexImage2D TEXTURE_2D 0 ALPHA 4 4 0 ALPHA 0 0 0 0 0 1 1 0 0 1 1 0 
0 0 0 0
+            TexParameter TEXTURE_2D TEXTURE_BASE_LEVEL 0
+            TexParameter TEXTURE_2D TEXTURE_MAX_LEVEL 0
+            TexParameter TEXTURE_2D TEXTURE_WRAP_S CLAMP
+            TexParameter TEXTURE_2D TEXTURE_WRAP_T CLAMP
+            TexParameter TEXTURE_2D TEXTURE_MIN_FILTER NEAREST
+            TexParameter TEXTURE_2D TEXTURE_MAG_FILTER NEAREST
+            BindTexture TEXTURE_2D 0
+            """ % texBOX.getTexId())
+    
 inittex()
 
 
@@ -438,6 +471,48 @@
                 Y_SECCOLOR + slice + outerflags,
                 outer_code, 1.0)
 
+        if self.flags >> 9 & 1:
+            offset_code = """
+            PushAttrib ENABLE_BIT TEXTURE_BIT CURRENT_BIT
+            BindTexture TEXTURE_2D %s
+            TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR
+            TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR
+            Enable TEXTURE_2D
+
+            Enable TEXTURE_SHADER_NV
+            TexEnv TEXTURE_SHADER_NV SHADER_OPERATION_NV TEXTURE_2D
+        
+            ActiveTexture TEXTURE1
+            TexEnv TEXTURE_SHADER_NV SHADER_OPERATION_NV %s
+            TexEnv TEXTURE_SHADER_NV PREVIOUS_TEXTURE_INPUT_NV TEXTURE0
+
+            BindTexture TEXTURE_2D %s
+            Enable TEXTURE_2D
+
+            ActiveTexture TEXTURE0
+
+            Enable ALPHA_TEST
+            AlphaFunc GEQUAL 1.0
+            """ % (texHILO.getTexId(), offsetprog, texBOX.getTexId())
+
+            offset_code += parseCombiner("color = 0; alpha = TEX1.alpha;")
+            offset_code += "Enable REGISTER_COMBINERS_NV\n";
+
+            
+            self.inner = GLRen.createIrregularEdge(shape,
+                texscale, linewidth, refsize, scale_pow,
+                border0, border1, 1.0,
+                "", "", 0, 0,
+                65536,
+                offset_code, 1.0)
+            self.outer = GLRen.createIrregularEdge(shape,
+                texscale, linewidth, refsize, scale_pow,
+                border0, border1, 1.0,
+                "", "", 0, 0,
+                SHIFTS + 65536,
+                offset_code, 1.0)
+            self.envelope = self.outer
+
 
 
     def scene(self, vs):
@@ -520,6 +595,7 @@
         print "7: 2ND TEXCOORDS (inv)", self.flags >> 6 & 1
         print "8: SHADOW", self.flags >> 7 & 1
         print "9: WIREFRAME", self.flags >> 8 & 1
+        print "0: 2D-OFFSET", self.flags >> 9 & 1
 
     def key(self, k):
         if 0: pass
Index: gzz/gfx/librenderables/renderables.py
diff -u gzz/gfx/librenderables/renderables.py:1.157 
gzz/gfx/librenderables/renderables.py:1.158
--- gzz/gfx/librenderables/renderables.py:1.157 Thu Nov 28 01:59:21 2002
+++ gzz/gfx/librenderables/renderables.py       Sat Nov 30 08:10:23 2002
@@ -1615,16 +1615,68 @@
 
         setup();
         GLERR;
-        Irregu::draw(coords1, vert, norm, texscale,
-                     linewidth, refsize, scale_pow,
-                     border0, border1, texslicing,
-                     &const0[0], &const1[0],
-                     angles, multi, flags);
 
-        GLERR;
+        // XXX: Kluge for 2D offset texture
+        if (flags & 65536) {
+            float xw = (coords2.transform(ZPt(1,0,0)) - 
coords2.transform(ZPt(0,0,0))).length();
+            float yw = (coords2.transform(ZPt(0,1,0)) - 
coords2.transform(ZPt(0,0,0))).length();
+            
+            float s = border1 - border0;
+            float sx = .25 * s / xw;
+            float sy = .25 * s / yw;
+            float mat[4] = { sx, 0, 0, sy };
+            ZPt vert[] = {
+              ZPt(+1 + sx, -1 - sy, 0),
+              ZPt(+1 + sx, +1 + sy, 0),
+              ZPt(-1 - sx, +1 + sy, 0),
+              ZPt(-1 - sx, -1 - sy, 0)
+            };
+            GLERR;
+            glActiveTexture(GL_TEXTURE1);
+            glTexEnvfv(GL_TEXTURE_SHADER_NV, GL_OFFSET_TEXTURE_MATRIX_NV, mat);
+            GLERR;
+            glActiveTexture(GL_TEXTURE0);
+
+            int passes = 1;
+            if (flags & 64) passes = 4;
+
+            for (int pass = 0; pass < passes; pass++) {
+                if (passes > 1) {
+                    glPushMatrix();
+                    switch (pass) {
+                        case 0: glTranslatef(-linewidth, 0, 0); break;
+                        case 1: glTranslatef(+linewidth, 0, 0); break;
+                        case 2: glTranslatef(0, -linewidth, 0); break;
+                        case 3: glTranslatef(0, -linewidth, 0); break;
+                    }
+                }
+                glBegin(GL_QUADS);
+                for (unsigned i = 0; i < 4; i++) {
+                    glMultiTexCoord2f(GL_TEXTURE1,
+                                      .5 + .25 * vert[i].x,
+                                      .5 + .25 * vert[i].y);
+                    ZPt tex = coords2.transform(vert[i]);
+                    glTexCoord4f(tex.x, tex.y, tex.z, texscale);
+                    coords1.vertex(tex);
+                }
+                glEnd();
+                GLERR;
+                if (passes > 1) glPopMatrix();
+            }
+            GLERR;
+            
+        } else {
+            Irregu::draw(coords1, vert, norm, texscale,
+                        linewidth, refsize, scale_pow,
+                        border0, border1, texslicing,
+                        &const0[0], &const1[0],
+                        angles, multi, flags);
+                        
+            GLERR;
+        }
+
         glPopAttrib();
         GLERR;
-
         DBG(dbg) << "IrregularEdge done\\n";
 
         """,




reply via email to

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