on master help sign in
added support for a few more uniform types. took out some console crap
f530040John P Mayer Jr
compiler/Parse/Helpers.hs+6−3
@@ -9,7 +9,7 @@ import Data.Char (isUpper)
9import qualified Data.Set as Set
9import qualified Data.Set as Set
10import qualified Data.Map as Map
10import qualified Data.Map as Map
11import qualified Language.GLSL.Parser as GLP
11import qualified Language.GLSL.Parser as GLP
12−import Language.GLSL.Syntax
12+import Language.GLSL.Syntax as GLS
13import Text.Parsec hiding (newline,spaces,State)
13import Text.Parsec hiding (newline,spaces,State)
14import Text.Parsec.Indent
14import Text.Parsec.Indent
15import qualified Text.Parsec.Token as T
15import qualified Text.Parsec.Token as T
@@ -349,8 +349,11 @@ glSource src =
349 Declaration (InitDeclaration (TypeDeclarator (FullType (Just (TypeQualSto qual)) (TypeSpec _prec (TypeSpecNoPrecision tipe _mexpr1)))) [InitDecl name _mexpr2 _mexpr3]) ->
349 Declaration (InitDeclaration (TypeDeclarator (FullType (Just (TypeQualSto qual)) (TypeSpec _prec (TypeSpecNoPrecision tipe _mexpr1)))) [InitDecl name _mexpr2 _mexpr3]) ->
350 if elem qual [Attribute, Varying, Uniform]
350 if elem qual [Attribute, Varying, Uniform]
351 then case tipe of
351 then case tipe of
352+ GLS.Int -> return (qual,Literal.Int,name)
353+ GLS.Float -> return (qual,Literal.Float,name)
352− Vec3 -> return (qual,V3,name)
354+ GLS.Vec3 -> return (qual,V3,name)
355+ GLS.Vec4 -> return (qual,V4,name)
353− Mat4 -> return (qual,M4,name)
356+ GLS.Mat4 -> return (qual,M4,name)
354 _ -> []
357 _ -> []
355 else []
358 else []
356 _ -> []
359 _ -> []
compiler/SourceSyntax/Literal.hs+4−1
@@ -21,10 +21,13 @@ instance Pretty Literal where
21 Str s -> PP.text . show $ s
21 Str s -> PP.text . show $ s
22 Boolean bool -> PP.text (show bool)
22 Boolean bool -> PP.text (show bool)
23
23
24−data GLTipe = V3 | M4
24+data GLTipe = Int | Float | V3 | V4 | M4
25
25
26glTipeName :: GLTipe -> String
26glTipeName :: GLTipe -> String
27+glTipeName Int = "Int"
28+glTipeName Float = "Float"
27glTipeName V3 = "MJS.V3"
29glTipeName V3 = "MJS.V3"
30+glTipeName V4 = "MJS.V4"
28glTipeName M4 = "MJS.M4x4"
31glTipeName M4 = "MJS.M4x4"
29
32
30data GLShaderTipe = GLShaderTipe
33data GLShaderTipe = GLShaderTipe
libraries/Graphics/WebGL.elm−1
@@ -4,7 +4,6 @@ module Graphics.WebGL (link, mapTriangle, zipTriangle, bind, encapsulate, webgl)
4
4
5import Graphics.Element (Element)
5import Graphics.Element (Element)
6import Native.Graphics.WebGL
6import Native.Graphics.WebGL
7−import Signal (Signal)
8
7
9data Shader a u v = Dummy_Shader
8data Shader a u v = Dummy_Shader
10data Program a u = Dummy_Program
9data Program a u = Dummy_Program
libraries/Native/Graphics/WebGL.js+15−6
@@ -31,7 +31,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
31
31
32 var guid = Utils.guid();
32 var guid = Utils.guid();
33
33
34− console.log("Wrapped program #" + guid);
34+ //console.log("Wrapped program #" + guid);
35
35
36 return program = {
36 return program = {
37 guid: guid,
37 guid: guid,
@@ -61,7 +61,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
61 var vshader = createShader(vSrc, gl.VERTEX_SHADER);
61 var vshader = createShader(vSrc, gl.VERTEX_SHADER);
62 var fshader = createShader(fSrc, gl.FRAGMENT_SHADER);
62 var fshader = createShader(fSrc, gl.FRAGMENT_SHADER);
63 var program = gl.createProgram();
63 var program = gl.createProgram();
64− console.log("Created shaders and program");
64+ //console.log("Created shaders and program");
65
65
66 gl.attachShader(program, vshader);
66 gl.attachShader(program, vshader);
67 gl.attachShader(program, fshader);
67 gl.attachShader(program, fshader);
@@ -78,7 +78,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
78
78
79 var guid = Utils.guid();
79 var guid = Utils.guid();
80
80
81− console.log("Wrapped buffer #" + guid);
81+ //console.log("Wrapped buffer #" + guid);
82
82
83 return buffer = {
83 return buffer = {
84 guid: guid,
84 guid: guid,
@@ -115,7 +115,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
115 var array = new Float32Array(data);
115 var array = new Float32Array(data);
116
116
117 var buffer = gl.createBuffer();
117 var buffer = gl.createBuffer();
118− console.log("Created attribute buffer " + attribute.name);
118+ //console.log("Created attribute buffer " + attribute.name);
119 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
119 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
120 gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW);
120 gl.bufferData(gl.ARRAY_BUFFER, array, gl.STATIC_DRAW);
121
121
@@ -132,7 +132,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
132
132
133 var numIndices = 3 * List.length(bufferElems);
133 var numIndices = 3 * List.length(bufferElems);
134 var indices = List.toArray(List.range(0, numIndices - 1));
134 var indices = List.toArray(List.range(0, numIndices - 1));
135− console.log("Created index buffer");
135+ //console.log("Created index buffer");
136 var indexBuffer = gl.createBuffer();
136 var indexBuffer = gl.createBuffer();
137 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
137 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
138 gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
138 gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
@@ -153,7 +153,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
153
153
154 gl.viewport(0, 0, model.w, model.h);
154 gl.viewport(0, 0, model.w, model.h);
155 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
155 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
156− console.log("Drawing");
156+ //console.log("Drawing");
157
157
158 function drawModel(m) {
158 function drawModel(m) {
159
159
@@ -170,6 +170,15 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
170 var uniform = gl.getActiveUniform(program, i);
170 var uniform = gl.getActiveUniform(program, i);
171 var uniformLocation = gl.getUniformLocation(program, uniform.name);
171 var uniformLocation = gl.getUniformLocation(program, uniform.name);
172 switch (uniform.type) {
172 switch (uniform.type) {
173+ case gl.INT:
174+ gl.uniform1i(uniformLocation, m.uniforms[uniform.name]);
175+ break;
176+ case gl.FLOAT:
177+ gl.uniform1f(uniformLocation, m.uniforms[uniform.name]);
178+ break;
179+ case gl.FLOAT_VEC3:
180+ gl.uniform3fv(uniformLocation, m.uniforms[uniform.name]);
181+ break;
173 case gl.FLOAT_MAT4:
182 case gl.FLOAT_MAT4:
174 gl.uniformMatrix4fv(uniformLocation, false, m.uniforms[uniform.name]);
183 gl.uniformMatrix4fv(uniformLocation, false, m.uniforms[uniform.name]);
175 break;
184 break;