创建着色器语言
个人是否有可能创建一种着色器编程语言?
Is it at all possible for an individual to create a shader programming language?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
个人是否有可能创建一种着色器编程语言?
Is it at all possible for an individual to create a shader programming language?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
SK-logic 在第一条评论中给出了答案。您可以构建一个自定义着色语言编译器,它采用自定义语言并将其“编译”为 GLSL 语言、HLSL 或其他任何语言。
这是一个现实的问题,因为现有的着色器方法可能会造成着色器的组合爆炸,并使您的着色器实现变得非常受限和相互依赖。自定义着色器语言可以轻松实现这些依赖关系的自动化,例如多层效果或细节级别控制。
您可以让着色器按照您“希望”的方式工作。如果需要的话,它还添加了一个完美的可移植层,可以完全抽象底层着色器语言。
生成的着色器将转到驱动程序,驱动程序完成其余的工作并为 GPU 编译本机代码。
制作编译器相当简单。您所需要的只是一个(词法分析器和)解析器,从中构建一个抽象语法树,然后对树进行几次遍历以收集您需要预先了解的信息并进行一些简单的常量表达式优化,并生成着色器作为输出从语法树。我最近使用柠檬作为解析器生成器。
SK-logic has the answer right there as the first comment. You can build a custom shading language compiler which takes the custom language and "compiles" it into GLSL language, or HLSL or anything else.
This is a realistic question because existing shader methodologies can create combinatorial explosions of shaders and can make your shader implementation become very restricted and interdependent. A custom shader language can make it easy for those dependencies to be automated, for example, for multiple layers of effects, or level-of-detail control.
You can make the shaders work they way you "wish" they worked. It also adds a perfect portability layer completely abstracting the underlying shader language if desired.
The generated shaders will go to the driver which takes it the rest of the way and compiles native code for the GPU.
It is fairly straightforward to make a compiler. All you need is a (lexer and) parser, build an abstract syntax tree from it, then do a few passes over the tree to gather information you need to know up front and do some simple constant expresssion optimizations, and generate the shaders as output from the syntax tree. I'm using lemon as parser generator lately.