CN111767046A - 一种着色器代码复用方法及终端 - Google Patents

一种着色器代码复用方法及终端 Download PDF

Info

Publication number
CN111767046A
CN111767046A CN202010417624.9A CN202010417624A CN111767046A CN 111767046 A CN111767046 A CN 111767046A CN 202010417624 A CN202010417624 A CN 202010417624A CN 111767046 A CN111767046 A CN 111767046A
Authority
CN
China
Prior art keywords
shader
macro
combination
macros
combination set
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010417624.9A
Other languages
English (en)
Other versions
CN111767046B (zh
Inventor
刘德建
涂智业
范堂舢
陈宏展
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian TQ Digital Co Ltd
Original Assignee
Fujian TQ Digital Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujian TQ Digital Co Ltd filed Critical Fujian TQ Digital Co Ltd
Priority to CN202010417624.9A priority Critical patent/CN111767046B/zh
Publication of CN111767046A publication Critical patent/CN111767046A/zh
Application granted granted Critical
Publication of CN111767046B publication Critical patent/CN111767046B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)

Abstract

本发明提供了一种着色器源代码复用方法及终端,获取所述着色器源代码中的着色器宏;将所述着色器宏按照功能进行分类,生成着色器宏组合;根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染;获取着色器源代码中的着色器宏,通过改变着色器宏组合集,实现不同的计算逻辑,即生成不同的着色器以达成不同的渲染效果,不对着色器源代码进行修改,也不用改变着色器源代码的解析方式,就能实现不同的渲染效果。

Description

一种着色器代码复用方法及终端
技术领域
本发明涉及着色器领域,尤其涉及一种着色器代码复用方法及终端。
背景技术
在对图像进行渲染时,就需要使用到着色器,着色器有可编辑的优点,能够在3D图像渲染中实现各种图像效果而不受显卡的固定渲染管线限制,极大程度提高了图像的画质;用一份着色器源代码实现不同的渲染效果,主要通过调整或者引入着色器参数,通过修改或者引入变量的方式,可能引入GPU(Graphics Processing Unit,图形处理器)计算分支或者增加指令数,降低着色器整体的执行效率;并且修改或者引入变量并不能达成所有渲染效果,有时必须通过改变着色器源代码或源代码的解析方式才能实现一些渲染效果,但直接修改着色器的源代码成倍增加了着色器的开发维护成本,改变着色器源代码的解析方式增加了额外的系统开销。
发明内容
本发明所要解决的技术问题是:提供一种着色器代码复用方法及终端,不改变着色器源代码和解析方式,实现不同的渲染效果并且不会增加额外的开销。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种着色器代码复用方法,包括步骤:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种着色器代码复用终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染。
本发明的有益效果在于:获取着色器源代码中的着色器宏,将所述着色器宏根据功能分为不同的着色器宏组合,根据具体的渲染任务选择不同的着色器宏组合,组成着色器宏组合集,并将所述着色器宏组合集直接定义在源代码中,通过对着色器源代码中的着色器宏进行统一管理,实现根据需要启用着色器源代码的不同部分,并且,由于是直接在源代码中对着色器宏组合集进行定义,无需对着色器源代码进行改变,也无需采用额外的解析方式,就能实现不同的渲染效果,无需更改着色器源代码及解析方式,故与原着色器源代码相比也不会产生增加消耗。
附图说明
图1为本发明实施例的方法的步骤流程图;
图2为本发明实施例的终端的结构示意图;
图3为本发明实施例的着色器宏组合构成示意图;
图4为本发明实施例的着色器宏组合集构成示意图;
图5为本发明实施例的着色器宏分类示意图;
图6为本发明实施例的着色器宏组合集合法性判定过程示意图;
图7为本发明实施例的着色器渲染过程示意图;
标号说明:
1、一种着色器代码复用终端;2、处理器;3、存储器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1,一种着色器代码复用方法,包括步骤:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染。
本发明的有益效果在于:获取着色器源代码中的着色器宏,将所述着色器宏根据功能分为不同的着色器宏组合,根据具体的渲染任务选择不同的着色器宏组合,组成着色器宏组合集,并将所述着色器宏组合集直接定义在源代码中,通过对着色器源代码中的着色器宏进行统一管理,实现根据需要启用着色器源代码的不同部分,并且,由于是直接在源代码中对着色器宏组合集进行定义,无需对着色器源代码进行改变,也无需采用额外的解析方式,就能实现不同的渲染效果,无需更改着色器源代码及解析方式,故与原着色器源代码相比也不会产生增加消耗。
进一步的,所述S2具体为:
将所述着色器宏分为全局宏、局部宏、灯光宏及实时宏;
所述着色器宏组合中的着色器宏来自同一类别。
由上述描述可知,将着色器宏按照不同用途分为不同的类别,便于后期对着色器宏进行管理,由同一类别的着色器宏组成着色器宏组合,便于掌握着色器宏的应用情况,避免重复调用,同时,此种分类方式基本覆盖了常见渲染任务的着色器宏种类,能够满足常见渲染任务的需求,对着色器宏的分类和使用起到了指导性的作用。
进一步的,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集具体为:
根据实际渲染任务,在每一着色器宏类别中选择一着色器宏组合;
根据所述每一着色器宏类别中选择的一着色器组合,生成着色器宏组合集。
由上述描述可知,选择来自不同类别的着色器宏组合生成着色器宏组合集,验证是否存在相同功能的着色器宏时,只需要在着色器宏组合中进行验证,提高了效率,进而加快了着色器源代码的编译进程。
进一步的,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集包括:
分析已完成的渲染任务,根据所述已完成的渲染任务的分析结果选择对应的着色器宏组合,根据所述选择的着色器宏组合生成预配置着色器宏组合集;
根据实际渲染任务,选择所述已完成的渲染任务中与所述实际渲染任务待实现效果相同的所述已完成的渲染任务对应的预配置着色器宏组合集,生成着色器宏组合集。
由上述描述可知,分析已完成的渲染任务,生成预配置着色器宏组合集,将已有的渲染任务信息充分利用,后续的实际渲染任务中若出现需要实现相同效果的渲染任务,可直接调用预配置着色器宏组合集,提高了着色器源代码的编译效率,且随着处理渲染任务的增加,着色器源代码的编译速度也会加快。
进一步的,所述S3中将所述着色器宏组合集定义在所述着色器源代码中,包括:
分类读取所述着色器宏组合集中组成着色器宏组合的着色器宏,根据全局宏组合中的着色器宏选择局部宏组合中的着色器宏;
将所述读取的着色器宏组合集中的全局宏组合中的着色器宏、灯光宏组合中的着色器宏、实时宏组合中的着色器宏与经过选择后的局部宏组合中的着色器宏定义在所述着色器源代码中。
由上述描述可知,根据所述全局宏组合中的着色器宏对局部宏组合中的着色器宏做出选择,因为全局宏与局部宏在功能上有相关联,若全局宏组合中没有相关着色器宏,即没有要求相关功能,可忽略其对应的局部宏组合中的着色器宏,减少了需要定义在着色器源代码中的着色器宏数量,加速了着色器源代码的编译。
请参照图2,一种着色器代码复用终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染。
本发明的有益效果在于:获取着色器源代码中的着色器宏,将所述着色器宏根据功能分为不同的着色器宏组合,根据具体的渲染任务选择不同的着色器宏组合,组成着色器宏组合集,并将所述着色器宏组合集直接定义在源代码中,通过对着色器源代码中的着色器宏进行统一管理,实现根据需要启用着色器源代码的不同部分,并且,由于是直接在源代码中对着色器宏组合集进行定义,无需对着色器源代码进行改变,也无需采用额外的解析方式,就能实现不同的渲染效果,无需更改着色器源代码及解析方式,故与原着色器源代码相比也不会产生增加消耗。
进一步的,所述S2具体为:
将所述着色器宏分为全局宏、局部宏、灯光宏及实时宏;
所述着色器宏组合中的着色器宏来自同一类别。
由上述描述可知,将着色器宏按照不同用途分为不同的类别,便于后期对着色器宏进行管理,由同一类别的着色器宏组成着色器宏组合,便于掌握着色器宏的应用情况,避免重复调用,同时,此种分类方式基本覆盖了常见渲染任务的着色器宏种类,能够满足常见渲染任务的需求,对着色器宏的分类和使用起到了指导性的作用。
进一步的,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集具体为:
根据实际渲染任务,在每一着色器宏类别中选择一着色器宏组合;
根据所述每一着色器宏类别中选择的一着色器组合,生成着色器宏组合集。
由上述描述可知,选择来自不同类别的着色器宏组合生成着色器宏组合集,验证是否存在相同功能的着色器宏时,只需要在着色器宏组合中进行验证,提高了效率,进而加快了着色器源代码的编译进程。
进一步的,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集包括:
分析已完成的渲染任务,根据所述已完成的渲染任务的分析结果选择对应的着色器宏组合,根据所述选择的着色器宏组合生成预配置着色器宏组合集;
根据实际渲染任务,选择所述已完成的渲染任务中与所述实际渲染任务待实现效果相同的所述已完成的渲染任务对应的预配置着色器宏组合集,生成着色器宏组合集。
由上述描述可知,分析已完成的渲染任务,生成预配置着色器宏组合集,将已有的渲染任务信息充分利用,后续的实际渲染任务中若出现需要实现相同效果的渲染任务,可直接调用预配置着色器宏组合集,提高了着色器源代码的编译效率,且随着处理渲染任务的增加,着色器源代码的编译速度也会加快。
进一步的,所述S3中将所述着色器宏组合集定义在所述着色器源代码中,包括:
分类读取所述着色器宏组合集中组成着色器宏组合的着色器宏,根据全局宏组合中的着色器宏选择局部宏组合中的着色器宏;
将所述读取的着色器宏组合集中的全局宏组合中的着色器宏、灯光宏组合中的着色器宏、实时宏组合中的着色器宏与经过选择后的局部宏组合中的着色器宏定义在所述着色器源代码中。
由上述描述可知,根据所述全局宏组合中的着色器宏对局部宏组合中的着色器宏做出选择,因为全局宏与局部宏在功能上有相关联,若全局宏组合中没有相关着色器宏,即没有要求相关功能,可忽略其对应的局部宏组合中的着色器宏,减少了需要定义在着色器源代码中的着色器宏数量,加速了着色器源代码的编译。
请参照图1,本发明的实施例一为:
一种着色器代码复用方法,具体包括:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
请参照图5,将所述着色器宏分为全局宏、局部宏、灯光宏及实时宏;
全局宏:作用到所有着色器,控制着色器基础渲染框架逻辑,所述着色器基础渲染框架逻辑例如光照模型相关计算流程、阴影计算流程、雾计算流程、平台相关计算流程、渲染品质等;
局部宏:作用到单个着色器,控制着色器特效计算逻辑,所述着色器特效计算逻辑例如顶点动画特效、涟漪特效、溶解特效等;
灯光宏:作用到所有着色器,控制着色器灯光计算逻辑,所述着色器灯光计算逻辑例如影响渲染对象的最大灯光数;
实时宏:作用到单个着色器,控制着色器实时变更逻辑,所述着色器实时变更逻辑例如泛光特效;
此分类方法能够覆盖着色器源代码中着色器宏的种类,便于对着色器源代码中的着色器宏进行统一管理;
将所述分类后的着色器宏继续在着色器源代码相应计算逻辑上使用;
如着色器源代码中的着色器宏中的画质等级宏SHADER_QUALITY应用:
设置漫反射diffuse的初始值为0,若SHADER_QUALITY的值大于0并且小于1,则所述diffuse取值0.5;若SHADER_QUALITY的值大于1,则SHADER_QUALITY>0与SHADER_QUALITY>1预编译指令作用域内的计算都将参与编译,即着色器将执行diffuse=0.5然后执行diffuse*=0.6,此时diffuse=0.5*0.6=0.3;
diffuse=0;
#if SHADER_QUALITY>0
diffuse=0.5//采样漫反射纹理
#endif
#if SHADER_QUALITY>1
diffuse*=0.6//漫反射叠加环境光
#endif
则运行所述着色器源代码时,漫反射diffuse的值分别为:
当SHADER_QUALITY为0时,漫反射diffuse等于0;
当SHADER_QUALITY为1时,漫反射diffuse等于0.5;
当SHADER_QUALITY为2时,漫反射diffuse等于0.3;
所述着色器宏组合中的着色器宏来自同一类别;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
请参照图6,生成着色器宏组合集后,对所述着色器宏组合集进行预处理,使着色器宏组合集中着色器宏组合唯一,并且着色器宏组合中的着色器宏唯一;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染;
请参照图3,多个着色器宏组成一个着色器宏组合;
请参照图4,多个着色器宏组合组成一个着色器宏组合集。
本发明的实施例二为:
一种着色器代码复用方法,其与实施例一的不同之处在于:
所述S3中,根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集具体为:
根据实际渲染任务,在每一着色器宏类别中选择一着色器宏组合;
根据所述每一着色器宏类别中选择的一着色器组合,生成着色器宏组合集;
根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集包括:
分析已完成的渲染任务,根据所述已完成的渲染任务的分析结果选择对应的着色器宏组合,根据所述选择的着色器宏组合生成预配置着色器宏组合集;
根据实际渲染任务,选择所述已完成的渲染任务中与所述实际渲染任务待实现效果相同的所述已完成的渲染任务对应的预配置着色器宏组合集,生成着色器宏组合集;
将所述着色器宏组合集定义在所述着色器源代码中,包括:
请参照图7,根据实际渲染任务中着色器宏之间的关系,判断着色器宏组合集中组成着色器宏组合的着色器宏是否需要定义在着色器源代码中,并按照着色器宏的作用范围,以一定规则重新装配着色器宏,并将所述重新装配的着色器宏定义在所述着色器源代码中;
具体的:使用预编译指令define将着色器宏定义在着色器源代码中,如局部宏中的画质等级分为3个等级,分别以0,1,2表示低,中,高,以画质等级SHADER_QUALITY定义为高画质等级为例,在着色器源代码中定义该着色器宏:#define SHADER_QUALITY 2;
分类读取所述着色器宏组合集中组成着色器宏组合的着色器宏,根据全局宏组合中的着色器宏选择局部宏组合中的着色器宏;
将所述读取的着色器宏组合集中的全局宏组合中的着色器宏、灯光宏组合中的着色器宏、实时宏组合中的着色器宏与经过选择后的局部宏组合中的着色器宏定义在所述着色器源代码中。
本发明的实施例三为:
将上述着色器代码复用方法应用于实际场景中:
需要渲染一个可配置画质等级的场景,获取着色器源代码中的着色器宏,如具体为:PBR光照模型计算宏、Phong光照模型计算宏、雾计算宏、画质等级宏、蒙皮计算宏、外发光贴图宏、光照计算宏、点光源数宏及泛光宏;
将上述着色器宏进行分类
全局宏:PBR光照模型计算宏、Phong光照模型计算宏、雾计算宏、画质等级宏;
局部宏:蒙皮计算宏、外发光贴图宏、光照计算宏;
灯光宏:点光源数宏;
实时宏:泛光宏;
生成着色器宏组合:
全局宏组合1:PBR光照模型计算宏、Phong光照模型计算宏、雾计算宏、画质等级宏;全局宏组合2:Phong光照模型计算宏、雾计算宏、画质等级宏;全局宏组合3:Phong光照模型计算宏、雾计算宏、画质等级宏;
局部宏组合1:蒙皮计算宏、外发光贴图宏、光照计算宏;局部宏组合2:蒙皮计算宏、光照计算宏;局部宏组合3:外发光贴图宏、光照计算宏;
灯光宏组合1:点光源数宏;
实时宏组合1:泛光宏;
若需要渲染高等级画质的画面,选择对应的着色器宏组合:
全局宏组合:全局宏组合1;局部宏组合:局部宏组合1;灯光宏组合:灯光宏组合1;实时宏组合:实时宏组合1;
根据所述选择的着色器宏组合,生成着色器宏组合集,所述着色器宏组合集由全局宏组合1,局部宏组合1,灯光宏组合1及实时宏组合1组成;
优选的,选择预配置着色器宏组合集,生成所述着色器宏组合集;
将所述着色器宏组合集存储在本地文件系统中;
验证着色器宏组合集中着色器宏组合的唯一性及着色器宏组合中着色器宏的唯一性:以字母顺序对各个着色器宏组合重新排序,若检索到重复的着色器宏组合,只保留其中一个着色器宏组合;在选定的着色器宏组合中,以字母顺序对各个着色器宏重新排序,若检索到重复的着色器宏,只保留其中一个着色器宏;
根据全局宏组合中的着色器宏,选择局部宏组合中的着色器宏,如选择的全局宏组合中没有PBR光照模型计算宏或Phong光照模型计算宏,则将局部宏组合中的光照宏移除;
具体的,定义的顺序和具体渲染任务有关,在一种可选的实施方式中,设置着色器宏定义模块对着色器宏组合重新排序,排序规则由实际着色器渲染任务确定,分析已排序的着色器宏组合,根据着色器宏之间的依赖关系确定预配置的宏是否最终能在着色器源代码中起作用,着色器宏定义模块按照最终确定的着色器宏组合顺序以及着色器宏的作用范围将着色器宏定义在着色器源代码中,在此实施例中,依照全局宏、局部宏、光照宏、实时宏的顺序,将全局宏组合1、局部宏组合1、灯光宏组合1及实时宏组合1中的着色器宏定义在源代码中;
请参照图7,若此时渲染结束,则结束着色器编译过程,若还有新渲染任务,再次分析根据新渲染任务生成的着色器宏组合集;
在着色器源代码中定义着色器宏后,使用预处理指令ifdef判断是否定义相应着色器宏,若在源代码中定义了相应着色器宏,则实现所述着色器宏的计算逻辑,然后使用预处理指令else,对下一个着色器宏进行相应实现,最后使用预处理命令endif结束命令。
请参照图2,本发明的实施例四为:
一种着色器代码复用终端1,所述终端1包括处理器2、存储器3及存储在存储器3上并可在所述处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现实施例一、实施例二或实施例三中的各个步骤。
综上所述,本发明提供了一种着色器代码复用方法及终端,通过将着色器源代码根据功能切割为着色器宏,并将所述着色器宏分类生成着色器宏组合,根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集直接定义在源代码中,无需改变着色器源代码,也无需对着色器源代码的解析方式做出改变,就能够实现不同的实际渲染效果;将着色器宏进行分类,并且由同类的着色器宏组成着色器宏组合,便于后期验证着色器宏组合集中着色器宏组合的唯一性及着色器宏组合中着色器宏的唯一性,并且分类之后也有利于分析着色器宏之间的关系,对相关联的着色器宏做出处理;还对已完成的渲染任务进行分析,生成预配置着色器宏组合集,在不修改着色器源代码实现不同渲染效果的同时,保证了着色器代码编译的效率。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种着色器代码复用方法,其特征在于,包括步骤:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染。
2.根据权利要求1所述的一种着色器代码复用方法,其特征在于,所述S2具体为:
将所述着色器宏分为全局宏、局部宏、灯光宏及实时宏;
所述着色器宏组合中的着色器宏来自同一类别。
3.根据权利要求2所述的一种着色器代码复用方法,其特征在于,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集具体为:
根据实际渲染任务,在每一着色器宏类别中选择一着色器宏组合;
根据所述每一着色器宏类别中选择的一着色器组合,生成着色器宏组合集。
4.根据权利要求1所述的一种着色器代码复用方法,其特征在于,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集包括:
分析已完成的渲染任务,根据所述已完成的渲染任务的分析结果选择对应的着色器宏组合,根据所述选择的着色器宏组合生成预配置着色器宏组合集;
根据实际渲染任务,选择所述已完成的渲染任务中与所述实际渲染任务待实现效果相同的所述已完成的渲染任务所对应的预配置着色器宏组合集,生成着色器宏组合集。
5.根据权利要求2所述的一种着色器代码复用方法,其特征在于,所述S3中将所述着色器宏组合集定义在所述着色器源代码中,包括:
分类读取所述着色器宏组合集中组成着色器宏组合的着色器宏,根据全局宏组合中的着色器宏选择局部宏组合中的着色器宏;
将所述读取的着色器宏组合集中的全局宏组合中的着色器宏、灯光宏组合中的着色器宏、实时宏组合中的着色器宏与经过选择后的局部宏组合中的着色器宏定义在所述着色器源代码中。
6.一种着色器代码复用终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、获取所述着色器源代码中的着色器宏;
S2、将所述着色器宏按照功能进行分类,生成着色器宏组合;
S3、根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集,将所述着色器宏组合集定义在所述着色器源代码中;
S4、编译所述定义了所述着色器宏组合集的着色器源代码得到着色器,通过所述着色器对图像进行渲染。
7.根据权利要求6所述的一种着色器代码复用终端,其特征在于,所述S2具体为:
将所述着色器宏分为全局宏、局部宏、灯光宏及实时宏;
所述着色器宏组合中的着色器宏来自同一类别。
8.根据权利要求7所述的一种着色器代码复用终端,其特征在于,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集具体为:
根据实际渲染任务,在每一着色器宏类别中选择一着色器宏组合;
根据所述每一着色器宏类别中选择的一着色器组合,生成着色器宏组合集。
9.根据权利要求6所述的一种着色器代码复用终端,其特征在于,所述S3中根据实际渲染任务,选择对应的着色器宏组合,生成着色器宏组合集包括:
分析已完成的渲染任务,根据所述已完成的渲染任务的分析结果选择对应的着色器宏组合,根据所述选择的着色器宏组合生成预配置着色器宏组合集;
根据实际渲染任务,选择所述已完成的渲染任务中与所述实际渲染任务待实现效果相同的所述已完成的渲染任务所对应的预配置着色器宏组合集,生成着色器宏组合集。
10.根据权利要求7所述的一种着色器代码复用终端,其特征在于,所述S3中将所述着色器宏组合集定义在所述着色器源代码中,包括:
分类读取所述着色器宏组合集中组成着色器宏组合的着色器宏,根据全局宏组合中的着色器宏选择局部宏组合中的着色器宏;
将所述读取的着色器宏组合集中的全局宏组合中的着色器宏、灯光宏组合中的着色器宏、实时宏组合中的着色器宏与经过选择后的局部宏组合中的着色器宏定义在所述着色器源代码中。
CN202010417624.9A 2020-05-18 2020-05-18 一种着色器代码复用方法及终端 Active CN111767046B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010417624.9A CN111767046B (zh) 2020-05-18 2020-05-18 一种着色器代码复用方法及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010417624.9A CN111767046B (zh) 2020-05-18 2020-05-18 一种着色器代码复用方法及终端

Publications (2)

Publication Number Publication Date
CN111767046A true CN111767046A (zh) 2020-10-13
CN111767046B CN111767046B (zh) 2023-09-08

Family

ID=72719233

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010417624.9A Active CN111767046B (zh) 2020-05-18 2020-05-18 一种着色器代码复用方法及终端

Country Status (1)

Country Link
CN (1) CN111767046B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114115873A (zh) * 2021-11-18 2022-03-01 网易(杭州)网络有限公司 着色器数据处理方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8743116B1 (en) * 2006-02-24 2014-06-03 Microsoft Corporation Shader network
CN105446704A (zh) * 2014-06-10 2016-03-30 北京畅游天下网络技术有限公司 一种着色器的解析方法和装置
CN106997610A (zh) * 2016-01-26 2017-08-01 阿里巴巴集团控股有限公司 一种图像渲染方法、装置及电子设备
CN109893855A (zh) * 2019-03-19 2019-06-18 网易(杭州)网络有限公司 着色器的数据处理方法、装置、存储介质和电子装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8743116B1 (en) * 2006-02-24 2014-06-03 Microsoft Corporation Shader network
CN105446704A (zh) * 2014-06-10 2016-03-30 北京畅游天下网络技术有限公司 一种着色器的解析方法和装置
CN106997610A (zh) * 2016-01-26 2017-08-01 阿里巴巴集团控股有限公司 一种图像渲染方法、装置及电子设备
CN109893855A (zh) * 2019-03-19 2019-06-18 网易(杭州)网络有限公司 着色器的数据处理方法、装置、存储介质和电子装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114115873A (zh) * 2021-11-18 2022-03-01 网易(杭州)网络有限公司 着色器数据处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN111767046B (zh) 2023-09-08

Similar Documents

Publication Publication Date Title
WO2022116759A1 (zh) 图像渲染方法、装置、计算机设备和存储介质
US7015909B1 (en) Efficient use of user-defined shaders to implement graphics operations
US8482561B2 (en) Systems and methods for a ray tracing shader API
KR100742419B1 (ko) 애셋을 렌더링하는 쉐이더 구동 컴파일을 실행하는 시스템들 및 방법들
CN106575228B (zh) 图形处理中的渲染目标命令重新排序
CN105009082B (zh) 减少过多的编译时间
US8203558B2 (en) Dynamic shader generation
CN100507852C (zh) 用于优化流处理程序的方法、装置和系统
US7659901B2 (en) Application program interface for programmable graphics pipeline
US20060071933A1 (en) Application binary interface for multi-pass shaders
TW200947343A (en) System and method for instruction latency reduction in graphics processing
US9922442B2 (en) Graphics processing unit and method for performing tessellation operations
Chan et al. Efficient partitioning of fragment shaders for multipass rendering on programmable graphics hardware
US10559055B2 (en) Graphics processing systems
US9171401B2 (en) Conservative partitioning for rendering a computer-generated animation
CN111767046B (zh) 一种着色器代码复用方法及终端
Boechat et al. Representing and scheduling procedural generation using operator graphs
Sun et al. Efficient tensor cores support in tvm for low-latency deep learning
US9183662B1 (en) System and method for enabling scene program functionality
dos Santos et al. Review and comparative study of ray traversal algorithms on a modern gpu architecture
CN110070597A (zh) 一种基于OpenCL的Unity3D渲染加速方法
KR101008809B1 (ko) 쉐이더 자동 생성 방법과 쉐이더 생성 시스템
Haaser et al. Cosmo: Intent-based composition of shader modules
Mazouka et al. Efficient Scene Image Synthesis Based on Pipeline Technology
Kadir et al. Parallel ray tracing using mpi and openmp

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant