Modern OpenGL – GLSL着色语言2:GLSL入口函数和GLSL中的变量
1 GLSL的入口函数和基本结构
对于很多编程语言学习的第一步就是学习如何输出HelloWorld,学过类C语言的同学都知道,C和C++程序的入口函数就是从main函数开始,那么和C语言类似,GLSL语言的入口函数也是从main开始的,每一个OpenGL的shader都有着类似于下列代码的基本结构:
#version 330 core
void main()
{
// 在此处添加有关的shader程序代码
}
2 GLSL中的变量声明
- 与C/C++类似,GLSL是一种强类型的编程语言,所有变量在使用之前都必须提前声明,并且需要在声明时就指定变量的数据类型。
例如:
double redValue = 1.0f;
- 其次,变量的命名规范与C语言相同:可以使用字母、数字、下划线字符组成变量的名称,但是数字和下划线不能作为名称的第一个字符。
- 另外与C语言不同的是:变量名称在命名时不能使用连续的下划线,因为,在GLSL中使用连续下划线字符的有可能是保留字符。
3 GLSL中变量的作用域
- 在任何函数定义之外声明的变量拥有全局作用域,因此对着色器中所有函数都是可见的。类似于C语言中的全局变量。
#version 330 core
double redColor = 1.0f;
void main()
{
}
上述代码中的redColor对于该shader中所有函数都是可见。
- 在一组大括号之内,比如函数定义、循环体或者if语句块中声明的变量,只是对于该大括号内是可见的。类似于C语言中的局部变量。
- for循环的迭代自变量,
下面循环中的i,
#version 330 core
void main()
{
for(int i=0;i<100;++i)
{
}
}
上述的迭代变量i只在for循环体中有效,类似于C/C++。
4 GLSL中变量的初始化
int pointNum = 300;
float length = 150.89f;
bool isVisible = true;
double a = 3.1456465456456456465465LF;
- 所有声明的变量都必须在声明的同时进行初始化,防止出现错误
- 浮点数的初始化必须包含一个小数点或者使用科学计数法进行表示,例如7E-8
- flaot型的变量建议在初始化的时候在数值末尾添加f或者F后缀表示其为浮点数
- double精度的变量初始化时必须在数值末尾添加lF或者LF后缀表示其为一个双精度的变量
5 GLSL中变量的隐式转换
因为GLSL是一种强类型语言,其有着比C/C++语言更加严格的隐式转换规则。
比如说在C/C++中,bool型变量可以被隐式转换为int型变量,比如:
int isPass = false;
这在C/C++中是没有语法错误的,但是在GLSL中会返回一个编译错误,错误原因为:布尔值不能赋予整形变量。
由此可见GLSL比C/C++更加注重类型安全,在GLSL可支持隐式转换的类型如下:
可转换的类型 | 可从这些类型进行转换 |
---|---|
uint | int |
float | int、uint |
double | int、uint、float |
好的,本节对GLSL中入口函数和变量的声明使用以及初始化做了一些简单的介绍,下一节的内容将对GLSL的基本数据类型以及聚合数据类型等进行介绍。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Modern OpenGL – GLSL着色语言2:GLSL入口函数和GLSL中的变量
原文链接:https://www.stubbornhuang.com/973/
发布于:2020年11月16日 22:07:49
修改于:2023年06月26日 22:06:33
当前分类随机文章推荐
- Modern OpenGL从零开始 - 多个帧缓存Framebuffer绘制到同一个铺满屏幕四边形Quad上 阅读3008次,点赞1次
- Modern OpenGL从零开始 - Fbxsdk::FbxAMatrix转换为glm::mat4 阅读2937次,点赞0次
- Modern OpenGL从零开始 - 在Visual Studio中配置OpenGL开发环境 阅读2808次,点赞0次
- Modern OpenGL - GLSL着色语言3:GLSL中的数据类型 阅读2203次,点赞0次
- Modern OpenGL - GLSL着色语言2:GLSL入口函数和GLSL中的变量 阅读3042次,点赞0次
- Modern OpenGL - 与着色器Shader相关的API函数总结以及如何创建、编译与使用Shader 阅读1013次,点赞0次
- Modern OpenGL - GLSL着色语言4:GLSL中的数据存储限制符 阅读2403次,点赞0次
- Modern OpenGL - GLSL着色语言1:OpenGL着色器简介 阅读2979次,点赞0次
- Modern OpenGL从零开始 - 从茫茫多的OpenGL第三方库讲起 阅读3857次,点赞1次
全站随机文章推荐
- FFmpge - Ubuntu编译FFmpeg出现WARNING: pkg-config not found, library detection may fail警告 阅读6210次,点赞0次
- 资源分享 - Computational Geometry - Algorithms and Applications, Third Edition 英文高清pdf下载 阅读5983次,点赞1次
- 资源分享 - Mathematics for Computer Graphics , Third Edition 英文高清PDF下载 阅读1606次,点赞0次
- 资源分享 - 《Linux命令行大全》.((美)William E.shotts,Jr)中文pdf下载 阅读4412次,点赞2次
- Python - 使用with open as 读写文件 阅读1876次,点赞0次
- TortoiseGit - 本地仓库更改远程仓库URL 阅读1326次,点赞0次
- 资源分享 - Interactive Computer Graphics - A top-down approach with WebGL(Seven 7th Edition)英文高清PDF下载 阅读3110次,点赞0次
- Php - 获取用户的ip地址、操作系统、浏览器类型、入口页地址、当前访问页面地址等信息 阅读62次,点赞0次
- C++ - RAII机制 阅读1059次,点赞0次
- 资源分享 - Computer Graphics from Scratch - A Programmer's Introduction to 3D Rendering 英文高清PDF下载 阅读2002次,点赞0次
评论
169