Skip to content
This repository was archived by the owner on Aug 2, 2024. It is now read-only.

Commit 9aa59b9

Browse files
committed
Ensure GLSL symbols are prefixed to avoid user name collision
1 parent 64d4ecd commit 9aa59b9

File tree

3 files changed

+67
-60
lines changed

3 files changed

+67
-60
lines changed

docs/gpu.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
GPU support is currently provided by a single
22
[glsl file](https://github.com/jeremyong/klein/blob/master/glsl/klein.glsl).
33
This file can be pasted at the start of a shader to provide limited functionality supported by the
4-
full C++ Klein library. The plane, line, point, rotor, translator, and motor entity structs defined
5-
in this shader header are byte-for-byte identical to the entities as declared in C++.
4+
full C++ Klein library. The `kln_plane`, `kln_line`, `kln_point`, `kln_rotor`, and `kln_motor` entity structs defined
5+
in this shader header are byte-for-byte identical to their C++ counterparts.
66

77
Currently, the following functions are supported:
88

9-
| Function | Description |
10-
| ----------------------------------------------------- | ------------------------------------------------- |
11-
| `rotor rr_mul(in rotor a, in rotor b)` | Multiplies two rotors and returns the result |
12-
| `translator tt_mul(in translator a, in translator b)` | Multiplies two translators and returns the result |
13-
| `motor mm_mul(in motor a, in motor b)` | Multiplies two motors and returns the result |
14-
| `plane rotor_plane(in rotor r, in plane p)` | Applies a rotor to a plane |
15-
| `plane motor_plane(in motor m, in plane p)` | Applies a motor to a plane |
16-
| `point rotor_plane(in rotor r, in point p)` | Applies a rotor to a point |
17-
| `point motor_plane(in motor m, in point p)` | Applies a motor to a point |
18-
| `point motor_plane(in motor m)` | Applies a motor to the origin |
9+
| Function | Description |
10+
| ------------------------------------------------------------------ | ------------------------------------------------- |
11+
| `kln_rotor kln_mul(in kln_rotor a, in kln_rotor b)` | Multiplies two rotors and returns the result |
12+
| `kln_translator kln_mul(in kln_translator a, in kln_translator b)` | Multiplies two translators and returns the result |
13+
| `kln_motor kln_mul(in kln_motor a, in kln_motor b)` | Multiplies two motors and returns the result |
14+
| `kln_plane kln_apply(in kln_rotor r, in kln_plane p)` | Applies a rotor to a plane |
15+
| `kln_plane kln_apply(in kln_motor m, in kln_plane p)` | Applies a motor to a plane |
16+
| `kln_point kln_apply(in kln_rotor r, in kln_point p)` | Applies a rotor to a point |
17+
| `kln_point kln_apply(in kln_motor m, in kln_point p)` | Applies a motor to a point |
18+
| `kln_point kln_apply(in kln_motor m)` | Applies a motor to the origin |
1919

2020
GPU support is verified with a C++ test suite powered by a
2121
[shim](https://github.com/jeremyong/klein/blob/master/test/glsl_shim.hpp)

glsl/klein.glsl

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,44 @@
66
// p2 -> (e0123, e01, e02, e03)
77
// p3 -> (e123, e032, e013, e021)
88

9-
struct plane
9+
struct kln_plane
1010
{
1111
vec4 p0;
1212
};
1313

14-
struct line
14+
struct kln_line
1515
{
1616
vec4 p1;
1717
vec4 p2;
1818
};
1919

20-
struct point
20+
// If integrating this library with other code, remember that the point layout
21+
// here has the homogeneous component in p3[0] and not p3[3]. The swizzle to
22+
// get the vec3 Cartesian representation is p3.yzw
23+
struct kln_point
2124
{
2225
vec4 p3;
2326
};
2427

25-
struct rotor
28+
struct kln_rotor
2629
{
2730
vec4 p1;
2831
};
2932

30-
struct translator
33+
struct kln_translator
3134
{
3235
vec4 p2;
3336
};
3437

35-
struct motor
38+
struct kln_motor
3639
{
3740
vec4 p1;
3841
vec4 p2;
3942
};
4043

41-
rotor rr_mul(in rotor a, in rotor b)
44+
kln_rotor kln_mul(in kln_rotor a, in kln_rotor b)
4245
{
43-
rotor c;
46+
kln_rotor c;
4447
c.p1 = a.p1.x * b.p1;
4548
c.p1 -= a.p1.yzwy * b.p1.ywyz;
4649

@@ -52,17 +55,17 @@ rotor rr_mul(in rotor a, in rotor b)
5255
return c;
5356
}
5457

55-
translator tt_mul(in translator a, in translator b)
58+
kln_translator kln_mul(in kln_translator a, in kln_translator b)
5659
{
5760
// (1 + a.p2) * (1 + b.p2) = 1 + a.p2 + b.p2
58-
translator c;
61+
kln_translator c;
5962
c.p2 = a.p2 + b.p2;
6063
return c;
6164
}
6265

63-
motor mm_mul(in motor a, in motor b)
66+
kln_motor kln_mul(in kln_motor a, in kln_motor b)
6467
{
65-
motor c;
68+
kln_motor c;
6669
vec4 a_zyzw = a.p1.zyzw;
6770
vec4 a_ywyz = a.p1.ywyz;
6871
vec4 a_wzwy = a.p1.wzwy;
@@ -89,7 +92,7 @@ motor mm_mul(in motor a, in motor b)
8992
return c;
9093
}
9194

92-
plane rotor_plane(in rotor r, in plane p)
95+
kln_plane kln_apply(in kln_rotor r, in kln_plane p)
9396
{
9497
vec4 dc_scale = vec4(1.0, 2.0, 2.0, 2.0);
9598
vec4 neg_low = vec4(-1.0, 1.0, 1.0, 1.0);
@@ -108,14 +111,14 @@ plane rotor_plane(in rotor r, in plane p)
108111
t3 -= r.p1.xzwy * r.p1.xzwy;
109112

110113
// TODO: provide variadic rotor-plane application
111-
plane q;
114+
kln_plane q;
112115
q.p0 = t1 * p.p0.xzwy;
113116
q.p0 += t2 * p.p0.xwyz;
114117
q.p0 += t3 * p.p0;
115118
return q;
116119
}
117120

118-
plane motor_plane(in motor m, in plane p)
121+
kln_plane kln_apply(in kln_motor m, in kln_plane p)
119122
{
120123
vec4 dc_scale = vec4(1.0, 2.0, 2.0, 2.0);
121124
vec4 neg_low = vec4(-1.0, 1.0, 1.0, 1.0);
@@ -140,15 +143,15 @@ plane motor_plane(in motor m, in plane p)
140143
t4 *= vec4(0.0, 2.0, 2.0, 2.0);
141144

142145
// TODO: provide variadic motor-plane application
143-
plane q;
146+
kln_plane q;
144147
q.p0 = t1 * p.p0.xzwy;
145148
q.p0 += t2 * p.p0.xwyz;
146149
q.p0 += t3 * p.p0;
147150
q.p0 += vec4(dot(t4, p.p0), 0.0, 0.0, 0.0);
148151
return q;
149152
}
150153

151-
point rotor_point(in rotor r, in point p)
154+
kln_point kln_apply(in kln_rotor r, in kln_point p)
152155
{
153156
vec4 scale = vec4(0, 2, 2, 2);
154157

@@ -167,14 +170,14 @@ point rotor_point(in rotor r, in point p)
167170
t3 -= t4 * vec4(-1.0, 1.0, 1.0, 1.0);
168171

169172
// TODO: provide variadic rotor-point application
170-
point q;
173+
kln_point q;
171174
q.p3 = t1 * p.p3.xwyz;
172175
q.p3 += t2 * p.p3.xzwy;
173176
q.p3 += t3 * p.p3;
174177
return q;
175178
}
176179

177-
point motor_point(in motor m, in point p)
180+
kln_point kln_apply(in kln_motor m, in kln_point p)
178181
{
179182
vec4 scale = vec4(0, 2, 2, 2);
180183

@@ -199,17 +202,21 @@ point motor_point(in motor m, in point p)
199202
t4 *= scale;
200203

201204
// TODO: provide variadic motor-point application
202-
point q;
205+
kln_point q;
203206
q.p3 = t1 * p.p3.xwyz;
204207
q.p3 += t2 * p.p3.xzwy;
205208
q.p3 += t3 * p.p3;
206209
q.p3 += t4 * p.p3.x;
207210
return q;
208211
}
209212

210-
point motor_origin(in motor m)
213+
// If no entity is provided as the second argument, the motor is
214+
// applied to the origin.
215+
// NOTE: The motor MUST be normalized for the result of this operation to be
216+
// well defined.
217+
kln_point kln_apply(in kln_motor m)
211218
{
212-
point p;
219+
kln_point p;
213220
p.p3 = m.p1 * m.p2.x;
214221
p.p3 += m.p1.x * m.p2;
215222
p.p3 += m.p1.xwyz * m.p2.xzwy;

test/test_glsl.cpp

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88

99
TEST_CASE("rr_mul")
1010
{
11-
rotor r1;
11+
kln_rotor r1;
1212
r1.p1 = vec4(2, 3, 4, 5);
1313

14-
rotor r2;
14+
kln_rotor r2;
1515
r2.p1 = vec4(6, 7, 8, 9);
1616

17-
rotor r3 = rr_mul(r1, r2);
17+
kln_rotor r3 = kln_mul(r1, r2);
1818
CHECK_EQ(r3.p1.x, -86.f);
1919
CHECK_EQ(r3.p1.y, 36.f);
2020
CHECK_EQ(r3.p1.z, 32.f);
@@ -23,15 +23,15 @@ TEST_CASE("rr_mul")
2323

2424
TEST_CASE("mm_mul")
2525
{
26-
motor m1;
26+
kln_motor m1;
2727
m1.p1 = vec4(2, 3, 4, 5);
2828
m1.p2 = vec4(9, 6, 7, 8);
2929

30-
motor m2;
30+
kln_motor m2;
3131
m2.p1 = vec4(6, 7, 8, 9);
3232
m2.p2 = vec4(13, 10, 11, 12);
3333

34-
motor m3 = mm_mul(m1, m2);
34+
kln_motor m3 = kln_mul(m1, m2);
3535
CHECK_EQ(m3.p1.x, -86.f);
3636
CHECK_EQ(m3.p1.y, 36.f);
3737
CHECK_EQ(m3.p1.z, 32.f);
@@ -44,11 +44,11 @@ TEST_CASE("mm_mul")
4444

4545
TEST_CASE("rotor_plane")
4646
{
47-
rotor r;
47+
kln_rotor r;
4848
r.p1 = vec4(1, 4, -3, 2);
49-
plane p1;
50-
p1.p0 = vec4(2, 3, 4, 5);
51-
plane p2 = rotor_plane(r, p1);
49+
kln_plane p1;
50+
p1.p0 = vec4(2, 3, 4, 5);
51+
kln_plane p2 = kln_apply(r, p1);
5252
CHECK_EQ(p2.p0.x, 60);
5353
CHECK_EQ(p2.p0.y, 42);
5454
CHECK_EQ(p2.p0.z, -144);
@@ -57,12 +57,12 @@ TEST_CASE("rotor_plane")
5757

5858
TEST_CASE("motor_plane")
5959
{
60-
motor m;
60+
kln_motor m;
6161
m.p1 = vec4(1, 4, -3, 2);
6262
m.p2 = vec4(8, 5, 6, 7);
63-
plane p1;
64-
p1.p0 = vec4(2, 3, 4, 5);
65-
plane p2 = motor_plane(m, p1);
63+
kln_plane p1;
64+
p1.p0 = vec4(2, 3, 4, 5);
65+
kln_plane p2 = kln_apply(m, p1);
6666
CHECK_EQ(p2.p0.x, 416);
6767
CHECK_EQ(p2.p0.y, 42);
6868
CHECK_EQ(p2.p0.z, -144);
@@ -71,11 +71,11 @@ TEST_CASE("motor_plane")
7171

7272
TEST_CASE("rotor_point")
7373
{
74-
rotor r;
74+
kln_rotor r;
7575
r.p1 = vec4(1, 4, -3, 2);
76-
point p1;
77-
p1.p3 = vec4(2, 3, 4, 5);
78-
point p2 = rotor_point(r, p1);
76+
kln_point p1;
77+
p1.p3 = vec4(2, 3, 4, 5);
78+
kln_point p2 = kln_apply(r, p1);
7979
CHECK_EQ(p2.p3.x, 60);
8080
CHECK_EQ(p2.p3.y, 42);
8181
CHECK_EQ(p2.p3.z, -144);
@@ -84,12 +84,12 @@ TEST_CASE("rotor_point")
8484

8585
TEST_CASE("motor_point")
8686
{
87-
motor m;
87+
kln_motor m;
8888
m.p1 = vec4(1, 4, -3, 2);
8989
m.p2 = vec4(8, 5, 6, 7);
90-
point p1;
91-
p1.p3 = vec4(2, 3, 4, 5);
92-
point p2 = motor_point(m, p1);
90+
kln_point p1;
91+
p1.p3 = vec4(2, 3, 4, 5);
92+
kln_point p2 = kln_apply(m, p1);
9393
CHECK_EQ(p2.p3.x, 60);
9494
CHECK_EQ(p2.p3.y, -238);
9595
CHECK_EQ(p2.p3.z, -144);
@@ -98,10 +98,10 @@ TEST_CASE("motor_point")
9898

9999
TEST_CASE("motor_origin")
100100
{
101-
motor m;
102-
m.p1 = vec4(1, 4, -3, 2);
103-
m.p2 = vec4(8, 5, 6, 7);
104-
point p = motor_origin(m);
101+
kln_motor m;
102+
m.p1 = vec4(1, 4, -3, 2);
103+
m.p2 = vec4(8, 5, 6, 7);
104+
kln_point p = kln_apply(m);
105105
CHECK_EQ(p.p3.x, 1);
106106
CHECK_EQ(p.p3.y, -140);
107107
CHECK_EQ(p.p3.z, 0);

0 commit comments

Comments
 (0)