openGL 预定义变量04
OpenGL4.0 GLSL预定义变量
GLSL为不同的渲染阶段定义了一些特定的变量。这些预定义(也叫做内置变量)有特定的属性。
所有的预定义变量都以gl_开头。用户定义的变量不能以此开头。
下面分类进行介绍。
(1)顶点着色器输入
in int gl_VertexID;
in int gl_InstanceID;
gl_VertexID是当前被处理的顶点的索引。对于array rendering,它是当前顶点在数组中的索引;对于indexed rendering,它是从element buffer中获取的索引值。
gl_InstanceID指出了当前被渲染的instance,当使用instancedrendering的时候。
(2)顶点着色器输出
out gl_PerVertex
{
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[];
}
为输出定义了一个block接口。
gl_Position是当前顶点的输出坐标(如果没有几何着色器,是在clip-space)。指定这个值并不是必须的。但是不指定可能会导致意想不到的结果。如果你使用转换反馈或者是关闭了光栅化,或者是使用采用用户定义输出产生坐标的几何着色器,则可以忽略指定这个值。
gl_PointSize指定了点的宽度和高度。只有在绘制点的时候指定它的值才是必须的。
gl_ClipDistance允许着色器设置一个顶点到每个剪切平面的距离。正值表示顶点在剪切平面的里面(后面),而负值表示在剪切平面的外面(前面)。
(3)几何着色器输入
in gl_PerVertex
{
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[];
} gl_in[]; in int gl_PrimitiveIDIn;
gl_PerVertex包含了从前面的顶点着色器传送过来的值。
注意:在几何着色器中,他们有前缀gl_in,是一个block的数组。这个数组的大小依赖于用于这个几何着色器的输入的layout关键词。用户不用以一个特定的大小重新声明这个block,系统会自动完成。可以用函数length()获得其大小。
gl_PrimitiveIDIn是在这次渲染过程中的图元数量,即先前被glDraw()调用所处理的图元数量。
GLSL4.00及其以上版本还有以下定义:
in int gl_InvocationID;
几何着色器可以被调用多次,这个值指定了当前调用。
(4)几何着色器输出
out gl_PerVertex
{
vec4 gl_Position;
float gl_PointSize;
float gl_ClipDistance[];
}; out int gl_PrimitiveID;
out int gl_Layer;
gl_PerVertex和顶点着色器阶段有相同的意义。
gl_PrimitiveID是图元的用户定义标识符。它直接被传送到片断着色器。如果片断着色器使用了它的相关输入但是几何着色器又没有指定它的值,那么它的值就是预定义的(如果没有几何着色器OpenGL会自动生成)。
gl_Layer用于渲染到layeredframebuffer objects,指定了特定图元要被渲染到的layer。
GLSL4.10还定义了如下输出:
out int gl_ViewportIndex;
它代表了当前图元要被采用得视口变换了裁剪测试。使用和gl_Layer类似。
(5)片断着色器输入
in vec4 gl_FragCoord;
in bool gl_FrontFacing;
in float gl_ClipDistance[];
in vec2 gl_PointCoord;
in int gl_PrimitiveID;
gl_FragCoord包含了当前片断的window-space坐标。如果入户没重载它,其Z分量是要写入到深度缓冲区的。其W分量是1/Wclip(Wclip是顶点或几何着色器的输出gl_Position的W分量)
gl_FrontFacing:如果图元从其前面观看,则为真,否则为假。
gl_ClipDistance包含了顶点着色器的输出,不过是依据图元进行线性插值后的。
gl_PointCoord:点内部的位置,指定了片断的位置。它是被归一化了的值,位于[0,1]。(0,0)原点位置依赖于OpenGL的点坐标设置,默认是在左下角。
gl_PrimitiveID是几何着色器的输出,如果没有使用几何着色器,由OpenGL产生。代表了被光栅化的图元索引。
GLSL4.00增加了一下输入:
in int gl_SampleID;
in vec2 gl_SamplePosition;
in int gl_SampleMaskIn[];
指定了像素区域sample的一些属性。
(6)片断着色器全局变量
struct gl_DepthRangeParameters
{
float near;
float far;
float diff;
};
uniform gl_DepthRangeParameters gl_DepthRange;
这个struct提供了对glDepthRange近、远值的访问。diff等于far和near的差。
(7)片断着色器输出
out float gl_FragDepth;
它是要被写入到深度缓冲区的值。也将被用于深度测试。片断着色器不一定要指定它的值。它可能被gl_FragCoord.z.自动填充。需要注意的是:如果在某处指定,在其他地方也必须要进行指定。
GLSL4.00增加了如下输出:
out int gl_SampleMask[];
当采用多重采样渲染时,它会被写入。
------------------------------------------------------
openGL 预定义变量04的更多相关文章
- GLSL预定义变量
GLSL为不同的渲染阶段定义了一些特定的变量.这些预定义(也叫做内置变量)有特定的属性.所有的预定义变量都以gl_开头.用户定义的变量不能以此开头. 下面分类进行介绍. (1)顶点着色器输入 in i ...
- PHP预定义变量
* PHP预定义 * 预定义变量 * $_GET - 接收客户端以请求类型为GET方法发送的数据内容 * $_POST - 接收客户端以请求类型为POST方法发送的数据内容 * $_REQUEST - ...
- linux中位置参数变量和预定义变量
位置参数变量 预定义变量
- 深入理解PHP内核(八)变量及数据类型-预定义变量
原文链接:http://www.orlion.ga/249/ PHP脚本在执行的时候用户全局变量(在用户空间显示定义的变量)会保存在一个HashTable数据类型的符号表中(symbol_table) ...
- Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1
Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1.1.1 C++内建变量(__LINE__).... 1.1.2 ...
- PHP学习笔记1.2——预定义变量参考
预定义变量和用户自定义变量在使用上没有区别,大多数预定义变量的执行结果都是服务器的相关信息(如:版本号.路径.错误参数等),所以我们很少将其用于网站前台开发,如果被别有用心得人知道了后,会严重威胁服务 ...
- 预定义变量 - PHP手册笔记
预定义变量将所有的外部变量表示成内建环境变量,并且将错误信息表示成返回头.超全局变量是在全部作用域中始终可用的内置变量.在函数或方法中无需执行global $variable,就可以访问它们. $GO ...
- PHP预定义变量$_SERVER
PHP预定义变量$_SERVER $_SERVER 是一个包含诸如头部(headers).路径(paths)和脚本位置(script locations)的数组.数组的实体由 web 服务器创建,不能 ...
- Shell 变量详解教程之位置变量与预定义变量。
Shell 变量分为3部分,分别是用户自定义变量.位置变量和预定义变量. 一. 自定义变量 那么,什么是变量呢?简单的说,就是让某一个特定字符串代表不固定的内容,用户定义的变量是最普通的Shell ...
随机推荐
- C中的指针和字符串
程序 #include<stdio.h>int main(void){ char *mesg="Don't be a fool!"; char *copy; copy= ...
- PHP使用header+Location实现网站301重定向
对于我们SEO人员来说,有的时候需要对网站进行重定向.一般来说,对网站重定向的http返回状态码是301和302两种.下面兰州SEO就通过实例来为你介绍一下怎样通过PHP使用header+Locati ...
- 洛谷P1027 Car的旅行路线
洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...
- java多线程学习一
声明:本篇博客是本人为了自己学习保存的心得,其内容主要是从大神——五月的仓颉的博客中学习而来,在此多谢大神五月的仓颉的分享,敬礼! 第一章:进程和线程的概念 进程:进程是操作系统中作为分配资源的基本单 ...
- HDU 2203 kmp
http://acm.hdu.edu.cn/showproblem.php?pid=2203 亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory ...
- map和reduce 个数的设定 (Hive优化)经典
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置 ...
- 通过例子深入理解javascript中的new操作符
1.首先看一道题目 function Cat(name,age){ this.name=name; this.age=age; } console.log(new Cat('miaomiao',18) ...
- SOLID
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. SRP The Single Responsibility ...
- mysql ORM框架及SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- LeetCode OJ:Binary Tree Zigzag Level Order Traversal(折叠二叉树遍历)
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...