Skip to content

Commit 9820f43

Browse files
Tristan de CacquerayTristan de Cacqueray
authored andcommitted
Add support for double and dvec uniform
This change adds GL_DOUBLE (np.float64) support to uniform types.
1 parent 7722937 commit 9820f43

3 files changed

Lines changed: 79 additions & 6 deletions

File tree

‎examples/gloo-double.py‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# -----------------------------------------------------------------------------
2+
# Copyright (c) 2019 tristanC
3+
# Distributed under the (new) BSD License.
4+
# -----------------------------------------------------------------------------
5+
from glumpy import app, gl, gloo
6+
7+
vertex = """
8+
attribute vec2 position;
9+
void main (void)
10+
{
11+
gl_Position = vec4(position, 0.0, 1.0);
12+
}
13+
"""
14+
15+
fragment = """
16+
#extension GL_NV_gpu_shader_fp64 : enable
17+
#define AA 2
18+
uniform dvec2 seed;
19+
void main(void)
20+
{
21+
vec3 col = vec3(0.0);
22+
for( int m=0; m<AA; m++ )
23+
for( int n=0; n<AA; n++ ) {
24+
f64vec2 c = f64vec2(seed);
25+
f64vec2 z = f64vec2((gl_FragCoord.xy +
26+
vec2(float(m), float(n)) / float(AA) - 0.5) /
27+
vec2(400., 400.) * 2. - 1.) * .0001;
28+
int idx;
29+
for (idx = 0; idx < 256; idx++)
30+
{
31+
z = abs(z);
32+
z = f64vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y ) + c;
33+
if (dot(z, z) > 2.)
34+
break;
35+
}
36+
col += vec3(idx / 256.);
37+
}
38+
gl_FragColor = vec4(col / float(AA * AA), 1.0 );
39+
}
40+
"""
41+
42+
window = app.Window(width=400, height=400)
43+
44+
@window.event
45+
def on_draw(dt):
46+
window.clear()
47+
# Small increment that only works with double precision
48+
seed[0] -= 1e-10
49+
burningship['seed'] = seed
50+
burningship.draw(gl.GL_TRIANGLE_STRIP)
51+
52+
burningship = gloo.Program(vertex, fragment, count=4, version=400)
53+
burningship['position'] = [(-1, -1), (-1, +1), (+1, -1), (+1, +1)]
54+
seed = [-1.41323032811858, -0.04230098494239652]
55+
app.run()

‎glumpy/gloo/shader.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ class Shader(GLObject):
6666
'vec2': gl.GL_FLOAT_VEC2,
6767
'vec3': gl.GL_FLOAT_VEC3,
6868
'vec4': gl.GL_FLOAT_VEC4,
69+
'double': gl.GL_DOUBLE,
70+
'dvec2': gl.GL_DOUBLE_VEC2,
71+
'dvec3': gl.GL_DOUBLE_VEC3,
72+
'dvec4': gl.GL_DOUBLE_VEC4,
6973
'int': gl.GL_INT,
7074
'ivec2': gl.GL_INT_VEC2,
7175
'ivec3': gl.GL_INT_VEC3,

‎glumpy/gloo/variable.py‎

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
vec2 gl.GL_FLOAT_VEC2 2 gl.GL_FLOAT np.float32
1616
vec3 gl.GL_FLOAT_VEC3 3 gl.GL_FLOAT np.float32
1717
vec4 gl.GL_FLOAT_VEC4 4 gl.GL_FLOAT np.float32
18+
double gl.GL_DOUBLE 1 gl.GL_DOUBLE np.float64
19+
dvec2 gl.GL_DOUBLE_VEC2 2 gl.GL_DOUBLE np.float64
20+
dvec3 gl.GL_DOUBLE_VEC3 3 gl.GL_DOUBLE np.float64
21+
dvec4 gl.GL_DOUBLE_VEC4 4 gl.GL_DOUBLE np.float64
1822
int gl.GL_INT 1 gl.GL_INT np.int32
1923
ivec2 gl.GL_INT_VEC2 2 gl.GL_INT np.int32
2024
ivec3 gl.GL_INT_VEC3 3 gl.GL_INT np.int32
@@ -75,6 +79,10 @@
7579
gl.GL_FLOAT_VEC2 : ( 2, gl.GL_FLOAT, np.float32),
7680
gl.GL_FLOAT_VEC3 : ( 3, gl.GL_FLOAT, np.float32),
7781
gl.GL_FLOAT_VEC4 : ( 4, gl.GL_FLOAT, np.float32),
82+
gl.GL_DOUBLE : ( 1, gl.GL_DOUBLE, np.float64),
83+
gl.GL_DOUBLE_VEC2 : ( 2, gl.GL_DOUBLE, np.float64),
84+
gl.GL_DOUBLE_VEC3 : ( 3, gl.GL_DOUBLE, np.float64),
85+
gl.GL_DOUBLE_VEC4 : ( 4, gl.GL_DOUBLE, np.float64),
7886
gl.GL_INT : ( 1, gl.GL_INT, np.int32),
7987
gl.GL_INT_VEC2 : ( 2, gl.GL_INT, np.int32),
8088
gl.GL_INT_VEC3 : ( 3, gl.GL_INT, np.int32),
@@ -101,12 +109,14 @@ def __init__(self, program, name, gtype):
101109
""" Initialize the data into default state """
102110

103111
# Make sure variable type is allowed (for ES 2.0 shader)
104-
if gtype not in [gl.GL_FLOAT, gl.GL_FLOAT_VEC2,
105-
gl.GL_FLOAT_VEC3, gl.GL_FLOAT_VEC4,
106-
gl.GL_INT, gl.GL_BOOL,
107-
gl.GL_FLOAT_MAT2, gl.GL_FLOAT_MAT3,
108-
gl.GL_FLOAT_MAT4, gl.GL_SAMPLER_1D,
109-
gl.GL_SAMPLER_2D, gl.GL_SAMPLER_CUBE]:
112+
if gtype not in [gl.GL_FLOAT, gl.GL_FLOAT_VEC2,
113+
gl.GL_FLOAT_VEC3, gl.GL_FLOAT_VEC4,
114+
gl.GL_DOUBLE, gl.GL_DOUBLE_VEC2,
115+
gl.GL_DOUBLE_VEC3, gl.GL_DOUBLE_VEC4,
116+
gl.GL_INT, gl.GL_BOOL,
117+
gl.GL_FLOAT_MAT2, gl.GL_FLOAT_MAT3,
118+
gl.GL_FLOAT_MAT4, gl.GL_SAMPLER_1D,
119+
gl.GL_SAMPLER_2D, gl.GL_SAMPLER_CUBE]:
110120
raise TypeError("Unknown variable type")
111121

112122
GLObject.__init__(self)
@@ -187,6 +197,10 @@ class Uniform(Variable):
187197
gl.GL_FLOAT_VEC2: gl.glUniform2fv,
188198
gl.GL_FLOAT_VEC3: gl.glUniform3fv,
189199
gl.GL_FLOAT_VEC4: gl.glUniform4fv,
200+
gl.GL_DOUBLE: gl.glUniform1dv,
201+
gl.GL_DOUBLE_VEC2: gl.glUniform2dv,
202+
gl.GL_DOUBLE_VEC3: gl.glUniform3dv,
203+
gl.GL_DOUBLE_VEC4: gl.glUniform4dv,
190204
gl.GL_INT: gl.glUniform1iv,
191205
gl.GL_BOOL: gl.glUniform1iv,
192206
gl.GL_FLOAT_MAT2: gl.glUniformMatrix2fv,

0 commit comments

Comments
 (0)