Skip to content

Commit 271a025

Browse files
committed
gl_triangles_n normalisation code to use loop() for comparability
1 parent fedef84 commit 271a025

File tree

1 file changed

+29
-34
lines changed

1 file changed

+29
-34
lines changed

lib/PDL/Graphics/OpenGLQ.pd

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -119,21 +119,17 @@ for(
119119
{Name => 'gl_triangles'},
120120
{Name => 'gl_triangles_n',
121121
NormalInit => '
122-
tmp1[0] = $coordsb(tri => 0) - $coordsa(tri => 0);
123-
tmp1[1] = $coordsb(tri => 1) - $coordsa(tri => 1);
124-
tmp1[2] = $coordsb(tri => 2) - $coordsa(tri => 2);
125-
tmp2[0] = $coordsc(tri => 0) - $coordsa(tri => 0);
126-
tmp2[1] = $coordsc(tri => 1) - $coordsa(tri => 1);
127-
tmp2[2] = $coordsc(tri => 2) - $coordsa(tri => 2);
128-
tmp3[0] = tmp1[1]*tmp2[2] - tmp2[1]*tmp1[2];
129-
tmp3[1] = -(tmp1[0]*tmp2[2] - tmp2[0]*tmp1[2]);
130-
tmp3[2] = tmp1[0]*tmp2[1] - tmp2[0]*tmp1[1];
131-
magn = sqrtf(tmp3[0]*tmp3[0] + tmp3[1]*tmp3[1] + tmp3[2]*tmp3[2]);
132-
tmp3[0] = tmp3[0] / magn;
133-
tmp3[1] = tmp3[1] / magn;
134-
tmp3[2] = tmp3[2] / magn;',
122+
loop(tri) %{
123+
tmp0_1[tri] = $coordsb() - $coordsa();
124+
tmp0_2[tri] = $coordsc() - $coordsa();
125+
%}
126+
tmpcross[0] = tmp0_1[1]*tmp0_2[2] - tmp0_2[1]*tmp0_1[2];
127+
tmpcross[1] = -(tmp0_1[0]*tmp0_2[2] - tmp0_2[0]*tmp0_1[2]);
128+
tmpcross[2] = tmp0_1[0]*tmp0_2[1] - tmp0_2[0]*tmp0_1[1];
129+
magn = sqrtf(tmpcross[0]*tmpcross[0] + tmpcross[1]*tmpcross[1] + tmpcross[2]*tmpcross[2]);
130+
loop(tri) %{ tmpcross[tri] /= magn; %}',
135131
NormalCodeA => '
136-
glNormal3f(tmp3[0], tmp3[1], tmp3[2]);
132+
glNormal3f(tmpcross[0], tmpcross[1], tmpcross[2]);
137133
'
138134
},
139135
{Name => 'gl_triangles_wn',
@@ -143,26 +139,25 @@ for(
143139
# This may be suboptimal but should still be fast enough..
144140
# We only do triangles with this.
145141
pp_def(
146-
$_->{Name},
147-
GenericTypes => $F,
148-
Pars => 'coordsa(tri=3); coordsb(tri); coordsc(tri);'.
149-
($_->{NormalArgs}//'').
150-
'colorsa(tri); colorsb(tri); colorsc(tri);',
151-
Code => '
152-
float tmp1[3], tmp2[3], tmp3[3], magn;
153-
glBegin(GL_TRIANGLES);
154-
broadcastloop %{'.
155-
($_->{NormalInit}//"\n").
156-
($_->{NormalCodeA}//'').
157-
COLOR("a").VERTEX("a").
158-
($_->{NormalCodeB}//'').
159-
COLOR("b").VERTEX("b").
160-
($_->{NormalCodeC}//'').
161-
COLOR("c").VERTEX("c").'
162-
%}
163-
glEnd();
164-
',
165-
@internal
142+
$_->{Name},
143+
GenericTypes => $F,
144+
Pars => 'coordsa(tri=3); coordsb(tri); coordsc(tri);'.
145+
($_->{NormalArgs}//'').
146+
'colorsa(tri); colorsb(tri); colorsc(tri);',
147+
Code => '
148+
float tmp0_1[3], tmp0_2[3], tmpcross[3], magn;
149+
glBegin(GL_TRIANGLES);
150+
broadcastloop %{'.
151+
($_->{NormalInit}//"\n").
152+
($_->{NormalCodeA}//'').
153+
COLOR("a").VERTEX("a").
154+
($_->{NormalCodeB}//'').
155+
COLOR("b").VERTEX("b").
156+
($_->{NormalCodeC}//'').
157+
COLOR("c").VERTEX("c").'
158+
%}
159+
glEnd();',
160+
@internal
166161
);
167162
}
168163

0 commit comments

Comments
 (0)