ixshader(ixshade):OpenGL着色语言在Haskell中的浅嵌入。

[bsd3型,游戏,图书馆][建议标签]

ixshader是OpenGL Shading的浅嵌入哈斯克尔语。它的目的是看起来尽可能接近实际尽可能使用glsl着色器代码,同时提供更好的编译时安全。当前正在中写入着色器代码ixshader的ixshader monad将捕获变量赋值不匹配、乘法不匹配等常见错误。它还构建着色器的描述在缓冲和统一更新。最后,它对着色器代码进行抽象为opengl和webgl编写。


[跳到自述]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 0.0.1.0
依赖关系 基础(>=4.7 && <5),ghc-prim公司(>=0.5),编入索引的(>=0.1.3),语言-glsl(>=0.2),解析(>=3.1),漂亮的班级(>=1.0),单子(>=2.2),template-haskell模板(>=2.11.1.0),文本(>=1.2)[细节]
许可证 BSD-3条款
版权所有 版权所有:(c)2017 Schell Scivally
作者 谢尔·西瓦利
维护人员 schell@takt.com
类别 游戏
主页 https://github.com/schell/ixshader#自述文件
源回购 头部:git克隆https://github.com/schell/ixshader
已上传 通过谢尔·西瓦利2017-10-07T19:51:40Z
分配
反向依赖关系 1直接,0间接[细节]
下载 总计933人(过去30天内有5人)
额定值 (尚未投票)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2017-10-07[所有1个报告]

ixshader-0.0.1.0自述文件

[返回包描述]

ixshader(ixshade)

ixshader(ixshade)是OpenGL着色语言在Haskell中的一个浅层嵌入。旨在尽可能接近实际的glsl着色器代码,同时提供更好的编译时安全性。当前正在中写入着色器代码ixshader(ixshade)IxShader(Ix着色器)monad将捕获变量赋值不匹配、乘法不匹配和其他一些常见错误。它还构建了您的类型级别的着色器,以便在缓冲和统一更新期间在下游使用。最后,它抽象了为opengl和webgl编写的着色器代码。

由于这是一项正在进行的工作,因此还不支持整个语言,虽然您可以轻松使用nxt(新文本)符合将您自己的glsl推入的函数管道,只检查您想要的类型。

生成的源代码非常漂亮,易于阅读,甚至可以在没有资源映射。

您应该为着色器创建一个单独的文件,如下所示ixshader(ixshade)依赖于这个可重新绑定语法语言扩展和重新定义关键功能,如>>=,>>,返回,失败,空隙,from整数来自Rational.

例子

{-#LANGUAGE允许模糊类型#-}{-#LANGUAGE数据种类#-}{-#LANGUAGE灵活上下文#-}{-#LANGUAGE灵活实例#-}{-#语言GADTs#-}{-#LANGUAGE Lambda案例#-}{-#LANGUAGE多参数类型类#-}{-#LANGUAGE PolyKinds#-}{-#LANGUAGE排名类型#-}{-#LANGUAGE可重新绑定语法#-}{-#LANGUAGE范围类型变量#-}{-#语言类型系列#-}{-#LANGUAGE TypeInType#-}{-#LANGUAGE类型运算符#-}{-#LANGUAGE无法确定实例#-}模块MyShaders,其中导入图形。IxShader(Ix着色器)我的顶点::for all(ctx::GLContext)。HasContext文本文本=>IxShader ctx‘[]’[In Xvec2“位置”,Xvec4“彩色”,统一Xmat4“投影”,统一Xmat4“模型视图”,输出Xvec4“fcolor”,输出Xvec4“gl_Position”,主要] ()myvertex=do位置<-in_颜色<-in_项目<-统一_modl<-统一_f颜色<-out_glPos<-gl_位置main_$dofcolor.=颜色颜色全局位置=项目*模型*(位置:0.0.:1.0)我的碎片::for all(ctx::GLContext)。IsGLContext ctx=>IxShader ctx'[]'[In Xvec4“fcolor”,输出Xvec4(GLFragName ctx),主要] ()myfragment=做f颜色<-in_glFrag<-gl_FragColormain_$glFrag.=f颜色main=做putStrLn“第一个OpenGL:”putSrcLn$vertex@'OpenGLContextputStrLn“\nThen WebGL:”putSrcLn$vertex@'WebGLContext{-第一个OpenGL:vec2位;vec4颜色;均匀mat4投影;统一mat4模型视图;输出vec4-fcolor;空心总管(){fcolor=颜色;gl_Position=投影*模型视图*vec4(Position.x,Position.y,0.0,1.0);}然后是WebGL:属性vec2位置;属性vec4颜色;均匀mat4投影;统一mat4模型视图;可变vec4-f颜色;空干管(){fcolor=颜色;gl_Position=投影*模型视图*vec4(Position.x,Position.y,0.0,1.0);}-}