刚学 OpenGL,如下是一段 GLSL 的代码,但是和网上搜到的 GLSL 代码结构完全不一样,请问这是什么写法?
//!HOOK SCALED
//!BIND HOOKED
//!BIND POSTKERNEL
//!SAVE POSTKERNEL
//!DESC Anime4K-ComputeLuma-v1.0RC
float getLum(vec4 rgb) {
return (rgb.r + rgb.r + rgb.g + rgb.g + rgb.g + rgb.b) / 6.0;
}
vec4 hook() { //Save lum on OUTPUT
vec4 rgb = HOOKED_tex(HOOKED_pos);
float lum = getLum(rgb);
return vec4(lum);
}
我所知道的 GLSL 需要顶点着色器和片段着色器,并且以 void main 函数起始。这段代码仅一个文件,无 main 函数,并且定义了多个hook
函数,是什么意思呢?
1
gggxxxx 2020-02-01 22:37:05 +08:00 1
这个做法应该是把部分 glsl 代码放在一个文件里,编译时会和其他部分代码组合后再编译。
|
2
nightwitch 2020-02-01 22:55:03 +08:00 2
https://github.com/bloc97/Anime4K/blob/master/GLSL_Instructions.md
你的这段 GLSL 是给播放器用的,播放器会重新 parse 这段 GLSL 具体的说明在这里 https://mpv.io/manual/master/#options-glsl-shader |
3
kokutou 2020-02-01 23:00:18 +08:00 via Android
卧槽,这是个好东西。。明天给我的 mpv 装上。。。
感谢。 |
4
Juszoe OP |
5
MCVector 2020-02-02 00:17:23 +08:00 via Android
这个应该是接在某个重新命名了 glsl 内置变量和函数的文件后面的。
不知道这个是什么 colospace, 但是 getLum 在每个 channel 上的 weight 好像不太对。 |