OpenGL shader文件 include

本文介绍了在OpenGL中实现Shader文件的#include功能,以避免重复编写公共函数。通过GL的ARB_shading_language_include扩展,实现虚拟文件系统加载include文件。文章详细讲解了检查扩展支持、配置glad库以及解决编译问题的过程,并提供了示例代码。
摘要由CSDN通过智能技术生成

需求:写glsl shader文件写多了,有一些公共的函数要在不同shader文件重复写一遍,相当烦!因此想include一个公共的shader文件,这个文件存一些公共函数。

实现这个功能有两个思路:要么在编译shader文件时处理宏定义include,同时要有自己一套的文件系统,shader文件里面include哪个文件,就去搜索自己的valid路径下是否存在这个文件,如果存在,读这个文件成字符串,与原来的shader文件拼接成一个字符串,再用gl compiler去编译;要么是用扩展GL_ARB_shading_language_include,这个扩展的资料相当少(指的是万能的谷歌,而不是废物baidu)。这里用了第二种思路来实现shader文件的include功能。

GL_ARB_shading_language_include这个是GL的扩展,需要先检查自己的环境是否支持这个扩展,如果不支持,你可以关掉了(对不起)。下面是检查是否支持扩展的代码(截取我项目的代码)

	static std::vector<std::string> g_supportExtensions;

	void GetSupportExtensions()
	{
		if (!g_supportExtensions.empty())
			return;

		GLint n, i;
		glGetIntegerv(GL_NUM_EXTENSIONS, &n);
		for (i = 0; i < n; i++)
		{
			std::string extension = (char*)glGetStringi(GL_EXTENSIONS, i);
			//C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值