Modern OpenGL - GLSL着色语言2:GLSL入口函数和GLSL中的变量

本文介绍了GLSL的入口函数和基本结构,强调了其以`main`函数为起点。GLSL变量需先声明后使用,遵循强类型规则,并在声明时指定类型。变量作用域分为全局和局部,初始化时所有变量必须赋值,浮点数需明确小数点或科学计数法,双精度变量需指定`LF`后缀。GLSL的隐式转换规则较C/C++更为严格,不支持如bool到int的转换。下篇将探讨GLSL的基本数据类型和聚合类型。
摘要由CSDN通过智能技术生成

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可支持隐式转换的类型如下:

可转换的类型可从这些类型进行转换
uintint
floatint、uint
doubleint、uint、float

好的,本节对GLSL中入口函数和变量的声明使用以及初始化做了一些简单的介绍,下一节的内容将对GLSL的基本数据类型以及聚合数据类型等进行介绍。

如果大家有兴趣,可以访问我的个站http://www.stubbornhuang.com查看更多内容!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值