[Top][All Lists]
[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";
""",
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gzz-commits] gzz ./TODO gfx/demo/irregu4.py gfx/librenderabl...,
Janne V. Kujala <=