尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

OpenGL(2)-着色器文件编译-链接-使用流程

OpenGL(2)-着色器文件编译-链接-使用流程
📅 发布时间:2026/6/19 9:27:15
OpenGL(2)-着色器文件编译-链接-使用流程

 

GLSL(wiki   chs)是OpenGL(OpenGL ES、WebGL)的着色器语言,拥有如下特点:

  与C语言一样,包括:预处理 -- 编译 -- 链接 -- 执行   四大步骤 

使用流程如下:

1. 提供顶点着色器(.vs)和片元着(.fs)文件。

2. 在CPU端,顶点着色器和片元着色器文件上载GPU,并在GPU端进行编译

3. 在GPU端,创建着色器程序,并完成链接。

 4. 在CPU端,使用着色器程序

image

程序如下:

(1)以下是顶点着色器和片段着色器的文本内容。

const char *vertexShaderSource = "#version 330 core\n""layout (location = 0) in vec3 aPos;\n""void main()\n""{\n""   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n""}\0";
const char *fragmentShaderSource = "#version 330 core\n""out vec4 FragColor;\n""void main()\n""{\n""   FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n""}\n\0";

(2)在GPU端创建着色器,完成文本上载到GPU端,进行链接,编译。

GPU编译:顶点着色器

// build and compile our shader program
// ------------------------------------
// vertex shader
unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);//在GPU端创建着色器
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);//GPU编译顶点着色器
// check for shader compile errors
int success;
char infoLog[512];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); // 检查是否vs编译成功
if (!success)
{glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); // 获取编译错误消息std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
}

GPU编译:片段着色器

// fragment shader
unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);//GPU端编译着色器
// check for shader compile errors
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); // 检查是否fs编译成功
if (!success)
{glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); // 获取编译错误消息std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
}

GPU端创着色器程序,并链接着色器

// link shaders
unsigned int shaderProgram = glCreateProgram();//GPU端创建:着色器程序
glAttachShader(shaderProgram, vertexShader);// 附加GPU端已经编译好的:顶点着色器
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);// 执行着色器程序的链接过程。
// check for linking errors
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); // 检测链接着色器程序是否失败
if (!success) {glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); // 获取链接错误消息std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
}glDeleteShader(vertexShader); // 链接完成后,不在需要vs着色器对象,在GPU端释放:已经编译好的顶点着色器(vertexShader,就是GPU端的地址)
glDeleteShader(fragmentShader); // 链接完成后,不在需要fs着色器对象

 CPU端使用着色器程序,程序结束,则释放GPU端的着色器程序

// render loop
// -----------
while (1)
{// Sleep for a whileglUseProgram(shaderProgram); // 设置要使用的着色器程序// Draw Something  
}   //渲染程序结束,要 释放着色器程序
glDeleteProgram(shaderProgram); 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

endl;

 

相关新闻

  • 终极macOS显示器控制神器:Lunar让你的外接显示器更智能
  • Qwen3-VL-8B-Thinking-FP8:8GB显存颠覆多模态AI部署格局
  • 远程监控Miniconda容器资源占用情况

最新新闻

  • HsMod终极指南:55+功能全面解析与高效炉石传说插件实战配置
  • 2026嘉峪关黄金回收白银回收铂金回收门店实测|本地正规实体老店无套路门店推荐 - 中安检金银铂钻回收
  • NSK微型滚珠丝杠MSFD1202技术解析
  • 2026重庆黄金回收星级测评榜单|收的顶资质服务双冠领跑 - 奢侈品回收测评
  • Honey Select 2 HF Patch:重新定义游戏体验的完整模组解决方案
  • 终极指南:5分钟搞定RE引擎游戏Mod开发,开启你的游戏改造之旅

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号