
如何管理shader
1个回答
2017-11-02 · 随时、随地的企业家商学院
BOSS商学院专注商学教育10余年,30000+学员遍布全国。在互联网+时代,携手知名经济学家、行业大咖及实战企业家,重新定义企业家学习新模式,打造一所随时、随地学习的企业家商学院。
向TA提问
关注

展开全部
使用shader的流程:
1. 编译vertex shader或者fragment shader;
2. 链接shader;
3. 初始化需要向shader传递的变量;(如:getUniformLocation)
4.在render函数中,实时传递shader变量。(如:setUniformLocation)
问题症结在第三步,对于不同的shader,需要初始化的shader变量不同,也很难预测开发者需要向shader传递哪些变量。
解决这个问题的方法是:
抽象一个shaderNode父类,完成shader的前面2个步骤,并提供一个抽象接口(如:virtual void
buildCustomUniforms() = 0;)
来完成第三步的初始化,让所有继承的子类来实现这个接口。
举例:
ShaderNode:所有shader的父类,提供公共接口的实现,如shader的编译和链接,shader从后台切换回来时reload函数的实现。
CustomShader:开发者自定义的shader,继承ShaderNode,并实现抽象接口buildCustomUniforms。在buildCustomUniforms中初始化自定义的shader变量。
ShaderCache:全局shader cache的持有者,使用shader_dec来描述所持有的ShaderNode。
shader_dec:ShaderNode的描述结构体,包括vertex shader和fragment
shader的文件名,查找key和ShaderNode指针(回调具体ShaderNode的reload函数)。
1. 编译vertex shader或者fragment shader;
2. 链接shader;
3. 初始化需要向shader传递的变量;(如:getUniformLocation)
4.在render函数中,实时传递shader变量。(如:setUniformLocation)
问题症结在第三步,对于不同的shader,需要初始化的shader变量不同,也很难预测开发者需要向shader传递哪些变量。
解决这个问题的方法是:
抽象一个shaderNode父类,完成shader的前面2个步骤,并提供一个抽象接口(如:virtual void
buildCustomUniforms() = 0;)
来完成第三步的初始化,让所有继承的子类来实现这个接口。
举例:
ShaderNode:所有shader的父类,提供公共接口的实现,如shader的编译和链接,shader从后台切换回来时reload函数的实现。
CustomShader:开发者自定义的shader,继承ShaderNode,并实现抽象接口buildCustomUniforms。在buildCustomUniforms中初始化自定义的shader变量。
ShaderCache:全局shader cache的持有者,使用shader_dec来描述所持有的ShaderNode。
shader_dec:ShaderNode的描述结构体,包括vertex shader和fragment
shader的文件名,查找key和ShaderNode指针(回调具体ShaderNode的reload函数)。

2025-02-18 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询