OpenGL:实现跨着色器传送数据

本文探讨了在OpenGL中如何实现着色器之间的数据传输,重点关注使用'in'和'out'关键字进行交流。顶点着色器通过location和layout属性高效地接收顶点数据,而片段着色器则利用vec4来存储输出颜色。核心代码段展示了这一过程的关键部分。
摘要由CSDN通过智能技术生成

要点:

  • 着色器之间靠数据传输,也就是数据输入----输出交流
  • 交流时,主要使用的关键字 in out
  • 但是顶点着色器和片段着色器的输入输出有些不同,因为顶点着色器需要高效率的输入顶点数据,因此使用locationlayout的组合以表示数据输入
  • 片段着色器因为最终要输出一个颜色到屏幕,因此需要一个vec4作为容器输入颜色

核心代码段:

const char *vertexbuffersource = "#version 330 core\n"
                                "layout (location = 0) in vec3 aPos;\n" // 位置变量的属性位置值为0
                                "out vec4 vertexColor;\n" // 为片段着色器指定一个颜色输出
                                "void main()\n"
                                "{\n"
                                "gl_Position = vec4(aPos, 1.0);\n"// 注意我们如何把一个vec3作为vec4的构造器的参数
                                "vertexColor = vec4(0.5, 0.0, 0.0, 1.0);\n" // 把输出变量设置为暗红色
                                "}\n\0";

const char *fragmentbuffersource = "#version 330 core\n"
                                    "out vec4 FragColor;\n"
                                    "in vec4 vertexColor;\n" // 从顶点着色器传来的输入变量(名称相同、类型相同)
                                    "void main()\n"
                                    "{\n"
                                    "FragColor = vertexColor;\n"
                                    "}\n\0";

全部代码段:

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
const unsigned int screen_width = 800;
const unsigned int screen_height = 600;
void framebuffer_size_callback(GLFWwindow * window, int width, int height);
void inputProcess(GLFWwindow * window);

const char *vertexbuffersource = "#version 330 core\n"
                                "layout (location = 0) in vec3 aPos;\n" // 位置变量的属性位置值为0
                              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值