如何管理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函数)。
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询