请教一段 GLSL 代码

2020-02-01 22:32:10 +08:00
 Juszoe

刚学 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函数,是什么意思呢?

完整代码出处 Anime4K

2064 次点击
所在节点    程序员
5 条回复
gggxxxx
2020-02-01 22:37:05 +08:00
这个做法应该是把部分 glsl 代码放在一个文件里,编译时会和其他部分代码组合后再编译。
nightwitch
2020-02-01 22:55:03 +08:00
https://github.com/bloc97/Anime4K/blob/master/GLSL_Instructions.md
你的这段 GLSL 是给播放器用的,播放器会重新 parse 这段 GLSL
具体的说明在这里 https://mpv.io/manual/master/#options-glsl-shader
kokutou
2020-02-01 23:00:18 +08:00
卧槽,这是个好东西。。明天给我的 mpv 装上。。。
感谢。
Juszoe
2020-02-01 23:00:52 +08:00
@gggxxxx #1
@nightwitch #2
感谢,原来还会重新 parse
MCVector
2020-02-02 00:17:23 +08:00
这个应该是接在某个重新命名了 glsl 内置变量和函数的文件后面的。
不知道这个是什么 colospace, 但是 getLum 在每个 channel 上的 weight 好像不太对。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/641507

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX