我试图使用Graphics.WebGL
,但每当我向我的页面添加一个webGL元素时,都没有出现,甚至没有我之前添加的其他非webGL元素。我使用的是elm-server
,并且其控制台中没有任何内容可以表明任何问题 - 只是一个空白页;它似乎默默地失败了。我已经更换了常规collage
的webGL代码,但确实显示出来了,所以据我所知,我的其他任何代码都没有任何问题。
以下是代码的一些相关部分
main = lift2 signalWrapper buttonSelected.signal frameRateSignal
buttonSelected.signal只跟踪在页面的非webGL部分中单击了哪个按钮。 frameRateSignal定义为
frameRateSignal : Signal Float
frameRateSignal = fps 25
信号包装器
signalWrapper signal time = flow right [buttons signal, glView time]
此时,如果我为glView time
交换collage 500 500 [filled red (rect (50 + x) (50 + x))]
,那么事情仍然会出现并以您期望的方式运作。 glView
定义为
glView time = webgl (50, 50) (scene time)
并且场景定义为
scene : Float -> [Entity]
scene time = [entity vertexShader fragmentShader fullScreenTriangle (uniforms time)]
其中的各个组成部分是
uniforms : Float -> {perspective : Mat4, camera : Mat4 }
uniforms t = {perspective = makePerspective 45 1 0.01 100 ,
camera = makeLookAt (vec3 0 0 5) (vec3 0 0 0) (vec3 0 1 0)
}
fullScreenTriangle : [Triangle Vertex]
fullScreenTriangle =
let tovo = vec3 1 1 0
tovt = vec3 0 0 0
tovth = vec3 0 1 0
ttvo = vec3 1 0 0
ttvt = vec3 0 1 0
ttvth = vec3 0 0 0
in
[
(makeVertex tovo, makeVertex tovt, makeVertex tovth),
(makeVertex ttvo, makeVertex ttvt, makeVertex ttvth)
]
--shaders
vertexShader : Shader { attr | position:Vec3, color:Vec3}
{ unif | perspective:Mat4, camera:Mat4}
{vcolor:Vec3}
vertexShader = [glsl|
attribute vec3 position;
attribute vec3 color;
uniform mat4 camera;
uniform mat4 perspective;
varying vec3 vcolor;
void main () {
gl_Position = perspective * camera * vec4(position,1.0);
vcolor = color;
}
|]
fragmentShader : Shader {} {unif | perspective:Mat4, camera:Mat4} {vcolor:
fragmentShader = [glsl|
varying vec3 vcolor;
void main () {
gl_FragColor = vec4(vcolor,1.0);
}
|]
很抱歉发布了这么多可能不相关的代码,但我真的不知道从哪里开始 - 没有可见的错误消息或任何要追求的内容。
答案 0 :(得分:2)
我查看了你的代码,一旦我编译完成,我发现浏览器开发控制台记录了一个可用的错误:
未捕获的异常:错误:0:2:'':没有为(float)
指定精度
片段着色器要求您定义浮点精度。定义后,your code gives some output。
鉴于此错误显示在一个不直观的地方,并且未事先得到警告,我建议您在library's GitHub page上打开一个问题。