GLSL内置变量与函数

这篇博客详细介绍了OpenGL的GLSL语言中内置变量的使用,包括在顶点着色、细分控制、几何着色、片元着色等不同阶段的变量。同时,也提到了常见的内置常量和函数,这些函数涉及角度计算、几何操作、矩阵处理等多个方面,为图形编程提供了丰富的功能。

内置变量

OpenGL渲染由以下几部分组成:顶点着色,细分控制着色,细分计算着色,几何着色,片元着色,计算着色。分别描述在各个阶段的内置变量。

顶点着色阶段

in int gl_VertexID;
in int gl_InstanceID;

out gl_PerVertex{
	vec4 gl_Position;
	float gl_PointSize;
	float gl_ClipDistance[];
	float gl_CullDistance[];
};

细分控制着色

in gl_PerVertex{
	vec4 gl_Position;
	float gl_PointSize;
	float gl_ClipDistance;
	float gl_CullDistance;
} gl_in[gl_MaxPatchVerTIces];
in int gl_PatchVerticesIn;
in int gl_PerimitiveID;
in int gl_InvocationID;

out gl_PerVertex{
	vec4 gl_Position;
	float gl_PointSize;
	float glClipDistance[];
	float gl_CullDistance[];
} gl_out[];

patch out float gl_TessLevelOuter[4];
patch out float gl_TessLevelInner[2];

细分计算着色

in gl_PerVertex{
	vec4 gl_Position;
	float gl_PointSize;
	float gl_ClipDistance[];
	float gl_CUllDistance[];
} gl_in[gl_MaxPatchVerticex];

in int gl_PatchVerticesIn;
in int gl_PrimitiveID;
in vec3 gl_TEssCoord;

patch in float gl_TessLevelOuter[4];
patch in float gl_TessLevelInner[2];

out gl_PerVertex{
	vec4 gl_Position;
	float gl_PointSize;
	float gl_ClipDistance[];
	float gl_CUllDistance[];
};

几何着色

in gl_PerVetex{
	vec4 gl_POsition;
	float gl_PointSize;
	float gl_ClipDistance[];
	float gl_CullDistance[];
} gl_in[];

in int gl_PrimitiveIDIn;
in int gl_InvocationID:
out gl_PerVertex{
	vec4 gl_Position;
	float gl_PointSize;
	float gl_ClipDistance[];
	float gl_CullDistance[];
};
 
out int gl_PrimitiveID;
out int gl_Layer;
out int gl_ViewportIndex;

片元着色

in vec4 gl_FragCoord;
in bool gl_FrontFacing;
in float gl_ClipDistance[];
in float gl_Culldistance[];
in vec2 gl_PointCoord;
in int gl_PrimitiveID;
in int gl_SampleID;
in vec2 gl_SamplePosition;
in int gl_SampleMaskIn[];
in int gl_Layer;
in int gl_ViewportIndex;
in bool gl_HelperInvocation;

out float gl_fragDepth;
out int gl_SampleMask[];

计算着色

in uvec3 gl_NumWorkGroups;
const uvec3 gl_WorkGroupSize;

in uvec3 gl_WorkGroupID;
in uvec3 gl_LocationInvocationID;

in uvec3 gl_GlobalInvocationID;
in uint gl_LocalInvocationIndex;

通用着色

struct gl_DepthRangeParameters{
	flaot near;
	flaot far;
	flaot diff;
};

uniform gl_DepthRangeParameters gl_DepthRange;

uniform int gl_NumSamples;

常见常量

对于一些常量值在不同的平台中值不一致,但至少不小于下面的值。

const ivec3 gl_MaxComputWorkGroupCount={65535,65535,65535};
const ivec3 gl_MaxComputeWorkGroupSize={1024,1024,64};
const int gl_MaxComputeUniformComponents=1024;
const int gl_MaxComputeImageUniform =8;
const int gl_MaxComputeAtomicCOunters=8;
cosnt int gl_MaxComputeAtomicCOunterBuffers=8;

const int gl_MaxVertexAttribs =16;
const int gl_MaxVertexUniformComponents=1024;

const int gl_MaxVaryingComponents=60;
const int gl_MaxVertexOutputComponents =64;
const int gl_MaxGeometryInputCOmponents =128;
const int gl_MaxGeometryOutputComponents =128;
const int gl_MaxFragInputComponents=128;
const int gl_MaxVertexTextureImageUnits=16;
const int gl_MaxCombineTextureImageUnits=96;
const int gl_MaxTextureImageUints=16;
const int gl_MaxIMageUints=8;
const int gl_MaxCombineShaderOuputResources=8;
const int gl_MaxImageSamples = 0;
const int gl_MaxVertexImageUniforms =0;
const int gl_MaxTessControlImageUinforms=0;
const int gl_MaxTessEvaluationImageUniforms=0;
const int gl_MaxGeometryImageUniforms=0;
const int gl_MaxFragImageUniforms=8;
const int gl_MaxCombinedImageUniforms=8;
const int gl_MaxFragmentUniformComponents=1024;
const int gl_MaxDrawBuffers=8;
const int gl_MaxClipDistance=8;
const int gl_MaxGeimetryTextureImageUnits=16;
const int gl_MaxGeometryOutputVertices=256;
const int gl_MaxGeometryTotalOutputComponents=1024;
const int gl_MaxGeometryUniformComponents=1024;

const int gl_MaxtessControlInputComponents=128;
const int gl_MaxtessControlOutputComponents =128;
const int gl_MaxTessControlTextureImageUnits=16;
const int gl_MaxTessControlUniformComponents =1024;
const int gl_MaxTessControlTotalOUtputComponents=4096;

const int gl_MaxTessEvalutionInputComponents=128;
const int gl_MaxTessEvalutionOutputComponents=128;
const int gl_MaxTessEvalutionTextureComponents=16;
const int gl_MaxTessEvalutionTotalOutputComponents=1024;

const int gl_MaxTessPatchComponents=120;
const int gl_MaxpatchVertices=32;
const int gl_MaxTessGenLevel=64;

const int gl_MaxViewports=16;

const int gl_MaxVertexUniformVectors=256;
const int gl_MaxFragmentUniformVecotrs=256;
const int gl_MaxVaryingVectors=25;

const int gl_MaxVertexAtomicCounters=0;
const int gl_MaxTessControlAtomicCounters=0;
const int gl_MaxTessEvalutionAtomicCounters=0;
const int gl_MaxGeometryAtomicCounters=0;
const int gl_MaxFragmentAtomicCounters=0;
const int gl_MaxCombineAtomicCounters=8;
const int gl_MaxAtomicCounterBindings=1;
const int gl_VertexAtomicCounterBuffers=0;
const int gl_MaxTessControlAtomicCounterBuffers=0;
const int gl_MaxTessEvalutionAtomicCounterBuffers=0;
const int gl_MaxGeometryAtomicCounterBuffers=0;
const int gl_MaxGeometryAtomicCounterBuffers=0;
const int gl_MaxFragmentAtomicCounterBuffers=1;
const int gl_MaxCombinedAtomicCounterBuffers=1;
const int gl_MaxAtomicCounterBufferSize=32;

const int gl_MinProgramTexelOffset=-8;
const int gl_MaxProgramTexelOffset=7;
const int gl_MaxTransformFeedvaxkBuffers=4;
const int gl_MaxTransfromFeedbackInterleveldComponents=64;

const int gl_MaCullDistances=8;
const int gl_MaxCombinedClipAndCullDistances=8;
const int gl_MaxSamples =4;
const int gl_MaxVertexImageUniforms=0;
const int gl_MaxFragmentImageUniforms=8;
const int gl_MaxComputerImageUniforms=8;
const int gl_MaxCombinedImageUniforms=48;
const int gl_MaxCombinedShaderOutputResources=16;

内置函数

内置函数按照下列方式进行分组:角度和三角函数,指数函数,公共函数,浮点打包与解包函数,几何函数,矩阵函数,向量关系函数,整函数,纹理函数,原子计数器函数,图形函数,片元处理函数,几何着色器函数,着色器请求控制函数,着色内存控制函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值