Shader在Haskell建设

时间:2015-03-30 13:03:42

标签: opengl haskell shader dsl

我正在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

每个着色器函数都设置统一/属性变量和填充。提前谢谢你的帮助!

0 个答案:

没有答案