本文主要是介绍细分着色器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
细分控制
- 作用:
- 对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() {... }
细分流程
这篇关于细分着色器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!