on master help sign in
now webgl takes a signal function, so we can do one-time bind and link
e2fc4daJohn P Mayer Jr
libraries/Graphics/WebGL.elm+1−1
@@ -31,5 +31,5 @@ data Model = Dummy_Model
31encapsulate : Program a u -> Buffer a -> u -> Model
31encapsulate : Program a u -> Buffer a -> u -> Model
32encapsulate = Native.Graphics.WebGL.encapsulate
32encapsulate = Native.Graphics.WebGL.encapsulate
33
33
34−webgl : Signal (Int,Int) -> Signal (GL -> [Model]) -> Signal Element
34+webgl : Signal (Int,Int) -> (Signal GL -> Signal [Model]) -> Signal Element
35webgl = Native.Graphics.WebGL.webgl
35webgl = Native.Graphics.WebGL.webgl
libraries/Native/Graphics/WebGL.js+11−8
@@ -96,8 +96,16 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
96
96
97 }
97 }
98
98
99+ var numIndices = List.length(bufferElems);
100+ var indices = List.toArray(List.range(0,numIndices));
101+ console.log("Created index buffer");
102+ var indexBuffer = gl.createBuffer();
103+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
104+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
105+
99 var bufferObject = {
106 var bufferObject = {
100 numIndices: List.length(bufferElems),
107 numIndices: List.length(bufferElems),
108+ indexBuffer: indexBuffer,
101 buffers: buffers
109 buffers: buffers
102 };
110 };
103
111
@@ -129,12 +137,8 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
129 }
137 }
130
138
131 var numIndices = model.buffer.numIndices;
139 var numIndices = model.buffer.numIndices;
132− var indices = List.toArray(List.range(0,numIndices));
140+ var indexBuffer = model.buffer.indexBuffer;
133−
134− console.log("Created index buffer");
135− var indexBuffer = gl.createBuffer();
136 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
141 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
137− gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
138
142
139 var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
143 var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
140 for (var i = 0; i < numAttributes; i += 1) {
144 for (var i = 0; i < numAttributes; i += 1) {
@@ -162,14 +166,13 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
162
166
163 }
167 }
164
168
165− function webgl(sDimensions, sDraw) {
169+ function webgl(sDimensions, sfDraw) {
166
170
167 var node = newNode('canvas');
171 var node = newNode('canvas');
168 var gl = node.getContext('webgl');
172 var gl = node.getContext('webgl');
169 var sGL = Signal.constant(gl);
173 var sGL = Signal.constant(gl);
170
174
171− var application = F2(function(f,x) { return f(x); });
175+ var sModels = sfDraw(sGL);
172− var sModels = A3(Signal.lift2,application,sDraw,sGL);
173
176
174 function makeGLelement(dimensions, models, gl) {
177 function makeGLelement(dimensions, models, gl) {
175
178
tests/good/Box.elm+7−9
@@ -1,14 +1,11 @@
1
1
2import MJS (V3,v3,m4x4makeRotate)
2import MJS (V3,v3,m4x4makeRotate)
3−import Graphics.WebGL (link, bind, encapsulate, webgl)
3+import Graphics.WebGL (GL, Model, link, bind, encapsulate, webgl)
4
4
5-- Define what our geometry looks like
5-- Define what our geometry looks like
6
6
7−top : V3
8top = v3 0 1 0
7top = v3 0 1 0
9−left : V3
10left = v3 -1 -1 0
8left = v3 -1 -1 0
11−right : V3
12right = v3 1 -1 0
9right = v3 1 -1 0
13
10
14mesh : [{ pos : V3 }]
11mesh : [{ pos : V3 }]
@@ -28,13 +25,14 @@ void main () {
28}
25}
29|]
26|]
30
27
28+draw : Signal Float -> Signal GL -> Signal [Model]
31draw theta gl =
29draw theta gl =
32− let prog = link gl vert frag
30+ let prog = link <~ gl ~ constant vert ~ constant frag
33− buf = bind gl prog mesh
31+ buf = bind <~ gl ~ prog ~ constant mesh
34− rot = m4x4makeRotate theta <| v3 0 1 0
32+ rot = (\t vec -> { rot = m4x4makeRotate t vec }) <~ theta ~ constant (v3 0 1 0)
35− in [ encapsulate prog buf {rot=rot} ]
33+ in combine [ encapsulate <~ prog ~ buf ~ rot ]
36
34
37angle = foldp (\_ n -> n + 0.1) 0 (fps 25)
35angle = foldp (\_ n -> n + 0.1) 0 (fps 25)
38
36
39−main = webgl (constant (400,400)) (draw <~ angle)
37+main = webgl (constant (400,400)) (draw angle)
40
38