细分着色器

来源:互联网 发布:04年总决赛科比数据 编辑:程序博客网 时间:2024/05/22 07:02

细分控制

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

    #version 430layout(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 430layout(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