openGL之API学习(四十七)layout作用详解

原文在https://www.khronos.org/opengl/wiki/Layout_Qualifier_(GLSL)

GLSL语言规范中也有对此的详细说明https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf

这里大致翻译如下:

布局限定符(GLSL除了这个限定符,还有很多其它限定符,比如存储限定符、内存限定符、插值限定符等,具体参看https://www.khronos.org/opengl/wiki/Type_Qualifier_(GLSL)),基本语法为:

layout(qualifier1​, qualifier2​ = value, ...) variable definition

主要有以下用法:

1、用于着色器输入/输出变量接口布局

着色器的输入/输出变量就是着色器与显存或其它着色器通信的接口,通过layout可以指定这些输入/输出变量从哪去什么值/向哪输出什么值。

1.1、顶点着色器的属性索引

layout(location = attribute index) in vec3 position;

可以指定顶点着色器输入变量使用的顶点属性索引值,一般在glVertexAttribPointer中指定属性索引值。如果同时使用了glBindAttribLocation,那么这个layout优先。

如果输入变量占用了多个属性位置槽,那么将按照属性位置顺序依次分配,如

layout(location = 2) in vec3 values[4];

values将依次获取属性位置2,3,4,5处的值。

值得注意的是,输入和输出变量的位置索引并不冲突,比如

#version 440

layout(location = 0) in vec4 inWorldPosition;
layout(location = 1) in vec4 inNormal;
layout(location = 2) in vec2 inTexCoord;
layout(location = 3) in vec4 inTangent;
layout(location = 4) in vec4 inBiTangent;

layout(location = 0) out 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值