3 |
ripple_scale = .25 |
ripple_scale = .25 |
4 |
size = 128 |
size = 128 |
5 |
|
|
6 |
|
if (GL.hasExtension("GL_NV_register_combiners") and |
7 |
|
GL.hasExtension("GL_EXT_secondary_color")): |
8 |
|
|
9 |
|
print "Using full displacement resolution textures with GL_NV_register_combiners" |
10 |
|
|
11 |
|
from gfx.libutil.nvcode import combinercode |
12 |
|
texenv_outer = combinercode(""" |
13 |
|
SecondaryColorEXT %(dotvec)s |
14 |
|
|
15 |
|
Enable REGISTER_COMBINERS_NV |
16 |
|
CombinerParameterNV NUM_GENERAL_COMBINERS_NV 2 |
17 |
|
|
18 |
|
# Compute TEXTURE . SECONDARY_COLOR dot product |
19 |
|
CI0 RGB A TEXTURE0 UNSIGNED_IDENTITY_NV RGB |
20 |
|
CI0 RGB B SECONDARY_COLOR_NV UNSIGNED_IDENTITY_NV RGB |
21 |
|
CO0 RGB SPARE0_NV DISCARD_NV DISCARD_NV NONE NONE TRUE FALSE FALSE |
22 |
|
|
23 |
|
# Add PRIMARY_COLOR |
24 |
|
CI1 RGB A SPARE0_NV UNSIGNED_IDENTITY_NV RGB |
25 |
|
CI1 RGB B ZERO UNSIGNED_INVERT_NV RGB |
26 |
|
CI1 RGB C PRIMARY_COLOR_NV UNSIGNED_IDENTITY_NV RGB |
27 |
|
CI1 RGB D ZERO UNSIGNED_INVERT_NV RGB |
28 |
|
CO1 RGB DISCARD_NV DISCARD_NV SPARE0_NV NONE NONE FALSE FALSE FALSE |
29 |
|
|
30 |
|
# Use as alpha |
31 |
|
FCI G SPARE0_NV UNSIGNED_IDENTITY_NV BLUE |
32 |
|
""") |
33 |
|
|
34 |
|
texenv_inner = combinercode(""" |
35 |
|
SecondaryColorEXT 0 0 0 |
36 |
|
|
37 |
|
Enable REGISTER_COMBINERS_NV |
38 |
|
CombinerParameterNV NUM_GENERAL_COMBINERS_NV 1 |
39 |
|
|
40 |
|
CI0 ALPHA A TEXTURE0 UNSIGNED_IDENTITY_NV ALPHA |
41 |
|
CI0 ALPHA B ZERO UNSIGNED_INVERT_NV ALPHA |
42 |
|
CI0 ALPHA C PRIMARY_COLOR_NV UNSIGNED_IDENTITY_NV BLUE |
43 |
|
CI0 ALPHA D ZERO UNSIGNED_INVERT_NV ALPHA |
44 |
|
CO0 ALPHA DISCARD_NV DISCARD_NV SPARE0_NV NONE NONE FALSE FALSE FALSE |
45 |
|
|
46 |
|
FCI G SPARE0_NV UNSIGNED_IDENTITY_NV ALPHA |
47 |
|
""") |
48 |
|
|
49 |
|
tex_scale = 1 |
50 |
|
tex_bias = 0 |
51 |
|
alphalevel = 1 |
52 |
|
w0,w1 = 1,1 |
53 |
|
|
54 |
|
def colmap0(dotvec): return "1 1 1" |
55 |
|
def colmap1(dotvec): return "0 0 0" |
56 |
|
|
57 |
|
elif GL.hasExtension("GL_EXT_texture_env_dot3"): |
58 |
|
|
59 |
|
print "Using 1/4 displacement resolution textures with GL_EXT_texture_env_dot3" |
60 |
|
|
61 |
|
texenv = """ |
62 |
|
Hint PERSPECTIVE_CORRECTION_HINT NICEST |
63 |
|
TexEnv TEXTURE_ENV TEXTURE_ENV_MODE COMBINE_EXT |
64 |
|
TexEnv TEXTURE_ENV COMBINE_RGB_EXT DOT3_RGBA_EXT |
65 |
|
TexEnv TEXTURE_ENV SOURCE0_RGB_EXT TEXTURE |
66 |
|
TexEnv TEXTURE_ENV OPERAND0_RGB_EXT %s |
67 |
|
TexEnv TEXTURE_ENV SOURCE1_RGB_EXT PREVIOUS_EXT |
68 |
|
TexEnv TEXTURE_ENV OPERAND1_RGB_EXT SRC_COLOR |
69 |
|
""" |
70 |
|
texenv_inner = texenv % "SRC_ALPHA" |
71 |
|
texenv_outer = texenv % "SRC_COLOR" |
72 |
|
|
73 |
|
tex_scale = .25 |
74 |
|
tex_bias = .75 |
75 |
|
alphalevel = .5 |
76 |
|
w0,w1 = 1,.5 |
77 |
|
|
78 |
|
def colmap0(dotvec): return js([.5 + .5 * c for c in dotvec]) |
79 |
|
def colmap1(dotvec): return js([.5 + .25 * c for c in dotvec]) |
80 |
|
else: |
81 |
|
assert(0) |
82 |
|
|
83 |
|
|
84 |
args = ["radius", "2", "ripple_scale", str(ripple_scale), |
args = ["radius", "2", "ripple_scale", str(ripple_scale), |
85 |
"scale", ".25", "bias", ".75", "eps", ".125"] |
"scale", str(tex_scale), "bias", str(tex_bias), "eps", ".125"] |
86 |
|
|
87 |
tex = GL.createTexture() |
tex = GL.createTexture() |
88 |
texinv = GL.createTexture() |
texinv = GL.createTexture() |
110 |
m = 0.5 * ripple_scale * texscale / len |
m = 0.5 * ripple_scale * texscale / len |
111 |
vec = (m * (y1 - y0), -m * (x1 - x0), 0, 0) # cw90 |
vec = (m * (y1 - y0), -m * (x1 - x0), 0, 0) # cw90 |
112 |
|
|
113 |
vert0 = js(vecmul(vecsub((x0,y0,0,1),vec), 1)) |
vert0 = js(vecmul(vecsub((x0,y0,0,1),vec), w0)) |
114 |
vert1 = js(vecmul(vecadd((x0,y0,0,1),vec), .5)) |
vert1 = js(vecmul(vecadd((x0,y0,0,1),vec), w1)) |
115 |
vert2 = js(vecmul(vecsub((x1,y1,0,1),vec), 1)) |
vert2 = js(vecmul(vecsub((x1,y1,0,1),vec), w0)) |
116 |
vert3 = js(vecmul(vecadd((x1,y1,0,1),vec), .5)) |
vert3 = js(vecmul(vecadd((x1,y1,0,1),vec), w1)) |
117 |
|
|
118 |
tex0 = js(vecmul((x0,y0,0,texscale), 1)) |
tex0 = js(vecmul((x0,y0,0,texscale), w0)) |
119 |
tex1 = js(vecmul((x0,y0,0,texscale), .5)) |
tex1 = js(vecmul((x0,y0,0,texscale), w1)) |
120 |
tex2 = js(vecmul((x1,y1,0,texscale), 1)) |
tex2 = js(vecmul((x1,y1,0,texscale), w0)) |
121 |
tex3 = js(vecmul((x1,y1,0,texscale), .5)) |
tex3 = js(vecmul((x1,y1,0,texscale), w1)) |
122 |
|
|
123 |
#print "Vertices:" |
#print "Vertices:" |
124 |
#print vert0, tex0 |
#print vert0, tex0 |
129 |
if outer: |
if outer: |
130 |
angle = atan2(y1 - y0, x1 - x0) - texangle |
angle = atan2(y1 - y0, x1 - x0) - texangle |
131 |
|
|
|
col0l = [ (1.0,0.5,0.5), (0.5,0.5,1.0), (0.5,1.0,0.5), (1.0,0.5,0.5) ] |
|
|
col1l = [ (.75,0.5,0.5), (0.5,0.5,.75), (0.5,.75,0.5), (.75,0.5,0.5) ] |
|
|
|
|
132 |
a = angle * 6 / (2 * pi) |
a = angle * 6 / (2 * pi) |
133 |
while a < 0: a+=3 |
while a < 0: a+=3 |
134 |
i = int(a) % 3 |
i = int(a) % 3 |
135 |
f = a - int(a) |
f = a - int(a) |
|
|
|
|
col0 = js(lerp(col0l[i], col0l[i+1], f)) |
|
|
col1 = js(lerp(col1l[i], col1l[i+1], f)) |
|
136 |
|
|
137 |
src = "SRC_COLOR" |
vecs = [ (1,0,0), (0,0,1), (0,1,0), (1,0,0) ] |
138 |
|
vec = lerp(vecs[i], vecs[i+1], f) |
139 |
else: |
else: |
140 |
col0 = "1 .5 .5 1" |
vec = (1,0,0) |
|
col1 = ".75 .5 .5 1" |
|
141 |
|
|
142 |
src = "SRC_ALPHA" |
col0 = colmap0(vec) |
143 |
|
col1 = colmap1(vec) |
144 |
|
dotvec = js(vec) |
145 |
|
|
146 |
code = """ |
code = """ |
147 |
PushAttrib ENABLE_BIT |
PushAttrib ENABLE_BIT |
149 |
BindTexture TEXTURE_2D %(texid)s |
BindTexture TEXTURE_2D %(texid)s |
150 |
TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR |
TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR |
151 |
TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR |
TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR |
|
Hint PERSPECTIVE_CORRECTION_HINT NICEST |
|
152 |
Enable TEXTURE_2D |
Enable TEXTURE_2D |
153 |
""" % locals() |
""" % locals() |
154 |
|
|
157 |
TexEnv TEXTURE_FILTER_CONTROL_EXT TEXTURE_LOD_BIAS_EXT %s |
TexEnv TEXTURE_FILTER_CONTROL_EXT TEXTURE_LOD_BIAS_EXT %s |
158 |
""" % lodbias |
""" % lodbias |
159 |
|
|
160 |
code += """ |
if outer: |
161 |
TexEnv TEXTURE_ENV TEXTURE_ENV_MODE COMBINE_EXT |
code += texenv_outer % locals() |
162 |
TexEnv TEXTURE_ENV COMBINE_RGB_EXT DOT3_RGBA_EXT |
else: |
163 |
TexEnv TEXTURE_ENV SOURCE0_RGB_EXT TEXTURE |
code += texenv_inner % locals() |
|
TexEnv TEXTURE_ENV OPERAND0_RGB_EXT %(src)s |
|
|
TexEnv TEXTURE_ENV SOURCE1_RGB_EXT PREVIOUS_EXT |
|
|
TexEnv TEXTURE_ENV OPERAND1_RGB_EXT SRC_COLOR |
|
164 |
|
|
165 |
|
alpha = alphalevel |
166 |
|
code += """ |
167 |
# Create edge stencil |
# Create edge stencil |
168 |
|
|
169 |
Enable ALPHA_TEST |
Enable ALPHA_TEST |
170 |
AlphaFunc LESS 0.5 |
AlphaFunc LESS %(alpha)s |
171 |
ColorMask 0 0 0 0 |
ColorMask 0 0 0 0 |
172 |
|
|
173 |
StencilMask 255 |
StencilMask 255 |