LearnOpenGL笔记3着色器封装成类


着色器是运行在GPU的小程序,为图形渲染管线某个特定部分而运行。着色器是一种把输入转化为输出的程序。相互之间不能通信,只有输入输出的联系。

GLSL

GLSL是为图形计算量身定制的,包含针对向量和矩阵操作的有用特性。
声明版本、输入输出变量、uniform、main;
着色器入口点都是main函数。
顶点着色器每个输入变量也叫顶点属性。

数据类型

向量

vecn 包含n个float分量的默认向量
bvecn 包含n个bool分量的向量
ivecn 包含n个int分量的向量
uvecn 包含n个unsigned int分量的向量
dvecn 包含n个double分量的向量

输入与输出

in out

uniform

从CPU向GPU中着色器发送数据的方式,但是uniform和顶点属性不同。
区别:
1、uniform是全局的,变量在每个着色器程序对象都是唯一的;
2、无论设置成什么,会一直保存数据,直到被重置或更新。
如果你声明了一个uniform却在GLSL代码中没用过,编译器会静默移除这个变量,导致最后编译出的版本中并不会包含它,这可能导致几个非常麻烦的错误,记住这点!
在游戏循环的每一次迭代中(所以他会逐帧改变)更新这个uniform,否则三角形就不会改变颜色。下面我们就计算greenValue然后每个渲染迭代都更新这个uniform:

while(!glfwWindowShouldClose(window))
{
    // 输入
    processInput(window);

    // 渲染
    // 清除颜色缓冲
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    // 记得激活着色器
    glUseProgram(shaderProgram);

    // 更新uniform颜色
    float timeValue = glfwGetTime();
    float greenValue = sin(timeValue) / 2.0f + 0.5f;
    int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");
    glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);

    // 绘制三角形
    glBindVertexArray(VAO);
    glDrawArrays(GL_TRIANGLES, 0, 3);

    // 交换缓冲并查询IO事件
    glfwSwapBuffers(window);
    glfwPollEvents();
}

更多属性

在片段着色器中进行的所谓片段插值(Fragment Interpolation)的结果。当渲染一个三角形时,光栅化(Rasterization)阶段通常会造成比原指定顶点更多的片段。光栅会根据每个片段在三角形形状上所处相对位置决定这些片段的位置。
基于这些位置,它会插值(Interpolate)所有片段着色器的输入变量。比如说,我们有一个线段,上面的端点是绿色的,下面的端点是蓝色的。如果一个片段着色器在线段的70%的位置运行,它的颜色输入属性就会是一个绿色和蓝色的线性结合;更精确地说就是30%蓝 + 70%绿。

自己的着色器类

自己写一个类,来从硬盘读取着色器,编译链接,错误检测;
代码就不贴了,就是将之前的封装了起来!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DDR3 笔记本内存卡槽的 layout 封装是指在设计笔记本内存卡槽时的布局和封装方式。DDR3 是一种常见的内存类型,而笔记本内存卡槽则是用于安装内存模块的插槽。 DDR3 笔记本内存卡槽通常采用SODIMM封装形式,即小型双列直插内存模块。SODIMM 封装相对于桌面机上的DIMM封装更小巧,适用于笔记本电脑的紧凑空间。 在DDR3 笔记本内存卡槽的 layout 设计中,通常会考虑以下几个方面: 1. 插槽位置:内存插槽通常位于笔记本电脑主板的底部或侧面,以方便用户更换或升级内存。 2. 插槽数量:不同型号的笔记本电脑会有不同数量的内存插槽,一般为一到两个插槽,用于安装内存模块。 3. 插槽规格:DDR3 笔记本内存卡槽的规格与内存模块规格相匹配,通常为204针。这意味着插槽上有204个金属接点,用于与内存模块上的连接引脚相对应。 4. 电气连接:为了确保数据的稳定传输和供电,DDR3 笔记本内存卡槽与主板之间会有相应的电气连接接口。这些接口可以保证内存模块和主板能够正确地进行通信和供电。 总之,DDR3 笔记本内存卡槽的 layout 封装是为了适应笔记本电脑的空间限制而设计的,采用SODIMM封装形式,具有相应的插槽位置、数量、规格和电气连接。这样设计的内存卡槽可以方便用户进行内存的更换和升级,提高笔记本电脑的性能和使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值