CSS Shaders 的 shader 放置位置:CSS vs. HTML vs. 额外档案

我刚学 OpenGL,顺道看了一下 CSS Shaders[1],我有个比较基本的问题:

  先不管现在现在的 CSS Shaders 语法好不好,shader 有必要放在额外的文件
  里么?

要求嵌入 shader 的优点应该是减少不必要的 HTTP 请求,尤其是 vertex shader
跟 fragment shader 还有不同的 URI。之后如果再有 geometry shader 会再加新
的 URI,听起来很多余。我不是很清楚有 SPDY 之后这类的性能考量是不是不重要了。

如果是在 CSS 嵌入 shader 的话,有可能是这样的语法:

  @filter warp {
     vertex:
`
#version 300
layout(location=0) in vec4 matrix;
void main(){
  ...
}
`;

     fragment:
`
#version 300
...
`;

  }

这里引入了一个新的跨行字符串的语法,因为旧的 CSS 字符串要添加断行字符的
话要用 \a,很丑。用 ES6 的 `` 还是 Python 的 """ 可以再讨论。之前有人是
觉得不应该再在 CSS 里面加上核心语法了,不过讨论变量的时候($var)发现到
也不是说一定不能加新的核心语法。

不用额外的 shader 档好像也比较自然,貌似 shader 档好像没有标准化的扩展名
[2]、MIME 类型(所以当前规范是用 'x-shader/x-vertex' 等等,也太长了)。
虽然估计实现不会去看 MIME 类型(如同 appcache 和 @fontface),不过连扩展
名都没有标准化的话,编辑器要高亮什么的估计有各种麻烦。

不过另外一个想法就是写 CSS 的跟写 CSS Shaders 的人可能会是不同的人,毕竟
shader 比较像是编程语言,所以分开档案可能在协作上比较方便?

有人可能会觉得用内嵌的可能会让 vertex shader 跟 fragment shader 不能任意
组合。不过这个在有 CSS 变量之后没什么问题,用

  vertex: var(vertex1)

之类的还是可以任意组合,况且我也怀疑需要这种任意组合的场景很少(比如我们
Sphinx 用的基本上都是一个 vertex shader 对应一个 fragment shader)


感觉这种 内嵌 vs. 模块化 的正反理由要多少就有多少。大家怎么看?规范还有
一个把 CSS 跟 shader 都嵌在 HTML 里的例子(EXAMPLE 11)。不过我觉得这种
反而是最不好的,毕竟概念上 HTML 是语意的东西,CSS 跟 shader 都是效果。



以上

Kenny

[1]
https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#custom-filter-src
[2]
http://stackoverflow.com/questions/6432838/what-is-the-correct-file-extension-for-glsl-shaders
-- 
Web Specialist, Opera Sphinx Game Engine Team, Oupeng Browser, Beijing
Try Sphinx: http://sphinx.oupeng.com/

Received on Sunday, 13 October 2013 01:27:01 UTC