on master help sign in
now webgl takes a signal function, so we can do one-time bind and link
commite2fc4daf4cc2aede7d18837e87f294e781917411 authorJohn P Mayer Jr <john.p.mayer.jr@gmail.com> dateMon 9 Dec 2013, 23:57 (13 years ago) parent1afcf6e
3 files changed+19−18
libraries/Graphics/WebGL.elm+1−1 libraries/Native/Graphics/WebGL.js+11−8 tests/good/Box.elm+7−9
libraries/Graphics/WebGL.elm+1−1
@@ -31,5 +31,5 @@ data Model = Dummy_Model
3131encapsulate : Program a u -> Buffer a -> u -> Model
3232encapsulate = Native.Graphics.WebGL.encapsulate
3333
34−webgl : Signal (Int,Int) -> Signal (GL -> [Model]) -> Signal Element
34+webgl : Signal (Int,Int) -> (Signal GL -> Signal [Model]) -> Signal Element
3535webgl = Native.Graphics.WebGL.webgl
libraries/Native/Graphics/WebGL.js+11−8
@@ -96,8 +96,16 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
9696
9797 }
9898
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+
99106 var bufferObject = {
100107 numIndices: List.length(bufferElems),
108+ indexBuffer: indexBuffer,
101109 buffers: buffers
102110 };
103111
@@ -129,12 +137,8 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
129137 }
130138
131139 var numIndices = model.buffer.numIndices;
132− var indices = List.toArray(List.range(0,numIndices));
133−
134− console.log("Created index buffer");
135− var indexBuffer = gl.createBuffer();
140+ var indexBuffer = model.buffer.indexBuffer;
136141 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
137− gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
138142
139143 var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
140144 for (var i = 0; i < numAttributes; i += 1) {
@@ -162,14 +166,13 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
162166
163167 }
164168
165− function webgl(sDimensions, sDraw) {
169+ function webgl(sDimensions, sfDraw) {
166170
167171 var node = newNode('canvas');
168172 var gl = node.getContext('webgl');
169173 var sGL = Signal.constant(gl);
170174
171− var application = F2(function(f,x) { return f(x); });
172− var sModels = A3(Signal.lift2,application,sDraw,sGL);
175+ var sModels = sfDraw(sGL);
173176
174177 function makeGLelement(dimensions, models, gl) {
175178
tests/good/Box.elm+7−9
@@ -1,14 +1,11 @@
11
22import MJS (V3,v3,m4x4makeRotate)
3−import Graphics.WebGL (link, bind, encapsulate, webgl)
3+import Graphics.WebGL (GL, Model, link, bind, encapsulate, webgl)
44
55-- Define what our geometry looks like
66
7−top : V3
87top = v3 0 1 0
9−left : V3
108left = v3 -1 -1 0
11−right : V3
129right = v3 1 -1 0
1310
1411mesh : [{ pos : V3 }]
@@ -28,13 +25,14 @@ void main () {
2825}
2926|]
3027
28+draw : Signal Float -> Signal GL -> Signal [Model]
3129draw theta gl =
32− let prog = link gl vert frag
33− buf = bind gl prog mesh
34− rot = m4x4makeRotate theta <| v3 0 1 0
35− in [ encapsulate prog buf {rot=rot} ]
30+ let prog = link <~ gl ~ constant vert ~ constant frag
31+ buf = bind <~ gl ~ prog ~ constant mesh
32+ rot = (\t vec -> { rot = m4x4makeRotate t vec }) <~ theta ~ constant (v3 0 1 0)
33+ in combine [ encapsulate <~ prog ~ buf ~ rot ]
3634
3735angle = foldp (\_ n -> n + 0.1) 0 (fps 25)
3836
39−main = webgl (constant (400,400)) (draw <~ angle)
37+main = webgl (constant (400,400)) (draw angle)
4038