细分着色器

细分控制

  • 作用:
    • 对input patch进行修改,输出output patch到TES
    • 为TPG提供细分参数
  • TCS函数会为每一个output patch中的每一个顶点执行一次,同一个patch中对应的函数共享同一个gl_ in和gl_out

    #version 430
    layout(vertices = 4) out;   //output patch大小
    
    /*---------------------内置输入变量---------------------
    in int gl_PatchVerticesIn;  //input patch中顶点数量
    in int gl_PrimitiveID;      //当前patch的索引
    in int gl_InvocationID;     //当前patch中对应函数的索引
    in gl_PerVertex
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    } gl_in [gl_MaxPatchVertices];
    -----------------------------------------------------*/
    
    
    /*---------------------内置输出变量---------------------
    patch out float gl_TessLevelOuter[4];
    patch out float gl_TessLevelInner[2];
    out gl_PerVertex
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    } gl_out[];
    -----------------------------------------------------*/
    
    //自定义输入
    in vec2 uvInTCS[];
    
    //自定义输出
    patch out vec2 uvInTES[];
    
    void main()
    {
        ...
    }
    

细分计算

  • 作用:接收从TCS传来的为细分面片顶点和从TPG传来的归一化细分坐标,生成细分后的顶点
  • TES函数为细分后的每一个顶点执行一次,同一个patch中对应的函数共享一个gl_in
  • TES只能输出线段或三角形

    #version 430
    layout(triangles,equal_spacing,ccw)
    /*---------------------内置输入变量---------------------
    in vec3 gl_TessCoord;
    in int gl_PatchVerticesIn;      //上一阶段output patch中的顶点数
    in int gl_PrimitiveID;          //对应patch的索引
    in gl_PerVertex
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    } gl_in[gl_MaxPatchVertices];
    -----------------------------------------------------*/
    
    /*---------------------内置输出变量---------------------
    out gl_PerVertex 
    {
        vec4 gl_Position;
        float gl_PointSize;
        float gl_ClipDistance[];
    };
    -----------------------------------------------------*/
    
    //自定义输入
    patch in vec2 uvInTES[];
    
    //自定义输出
    out vec2 uvInGS;
    
    void main()
    {
        ...
    }
    

细分流程

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值