Gen*_*tsu 5 opengl dsl shader haskell
我正在Haskell中创建一个渲染引擎,并且正在处理基于简单case语句和Maybe数据类型的着色器的使用方式.
我现在有4种不同类型的着色器:
简单的着色器,
Light Shader(Phong),
纹理着色器,
Light + Texture Shader
目前,我为每个人都有单独的着色器文件,但我想介绍其他着色模型.至少有3种不同的着色模型,我甚至没有做过颜色.
所以总共有4个(Flat,Gourad,Phong,没有照明)*2(纹理开/关)*2(颜色开/关)= 16种可能性我不希望每个都有单独的着色器文件他们 它似乎不是一个好的模型.
所以我想用DSL构建它.这个看起来很不错:https://github.com/fiendfan1/Haskell-GLSL-eDSL
有没有人有关于我如何做到这一点的任何提示?我希望能够轻松添加更多可能性,因为每次添加内容时我都必须至少加倍.它变得异常繁琐.
所以我现在就是这样做的:
p <- case (sProgram state) of
(Just sp) -> return sp
Nothing -> case (lighting state) of
(Just _) -> case (texture state) of
(Just _) -> ltShader state
Nothing -> lShader state
Nothing -> case (texture state) of
(Just _) -> tShader state
Nothing -> sShader state
Run Code Online (Sandbox Code Playgroud)
每个着色器函数都设置统一/属性变量和填充.提前谢谢你的帮助!