0x00 写在前面

最近在学习由 Patricio 编写的 The Book of Shaders,这是一本关于 Fragment Shaders(片段着色器)的入门指南。为了在一个相对熟悉的平台运行着色器代码,最后决定使用 VS Code 来配置开发环境。配置好的 VS Code 支持语法检测及代码提示,同时还可以实时预览修改的结果。

本文简单记录下安装和配置的过程。

0x01 安装 VS Code 及相关插件

第一步:安装 VS Code

第二步:在 VS Code 中安装相关的插件

安装插件的步骤:

  1. 点击右侧的 Extensions 按钮 (或使用快捷键 ctrl/cmd + shift + x)
  2. 在搜索框中输入插件名
  3. 点击插件旁的 Install 安装
  4. 有的插件需要重启 VS Code,则点击插件旁的 Reload Required

按照安装插件的步骤依次安装插件:

  1. Shader languages support for VS Code
  2. glsl-canvas
  3. GLSL Lint

0x02 语法检测

GLSL Lint 插件还依赖 OpenGL and OpenGL ES shader validator,点击链接即可前往,选择对应的 Release 版本下载。将下载好的压缩文件解压后,配置到系统环境变量中。因为不同的系统配置系统环境变量的方式也有所不同,这里不赘述了。

配置好环境变量后,重新打开 VS Code,新建一个文件来测试一下语法检测是否生效。这里故意删掉了 main 函数的右括号,可以看到第 7 行有红色的下划线提示,鼠标悬停在红线上会显示具体的错误信息。

同时也可以打开 Problems 界面来查看所有报错信息 (打开方式:View → Problems 或使用快捷键 ctrl/cmd + shift + m)。

0x03 代码提示

代码提示通过 VS Code 自带的 Snippets 功能来完成,在 VS Code 中依次点击 File → Preferences → User Snippets,在弹出的框中输入 glsl,点击第一个结果。VS Code 会帮我们创建一个名为 glsl.json 的文件,在该文件中我们可以自定义一些 glsl 的代码片段。

这里不妨直接使用 Lewis Lepton 写好的 配置文件。如果前面的链接访问速度较慢,也可以下载我上传到博客园中备份: glsl.json.zip

下载完成后,将其中的内容复制粘贴到刚刚创建好的 glsl.json 中并保存,就可以愉快地开始敲代码了。

0x04 Hello World

最后运行一段简单的 glsl 代码来检查上面的配置是否正确吧。

#ifdef GL_ES
precision mediump float;
#endif uniform vec2 u_resolution; void main() {
vec2 st = gl_FragCoord.xy/u_resolution;
gl_FragColor = vec4(st.x,st.y,0.0,1.0);
}

使用快捷键 ctrl/cmd + shift + p,输入并选择 Show glslCanvas 按下回车,应该就可以在右侧看到展示结果了。

0x05 其他说明

The Book of Shaders 使用 WebGL 运行环境,与普通的 GLSL 略有差异。一些细节可以前往 GlslCanvas 的项目主页进行查看。

参考资料:

Book of Shaders 00 - 使用 VS Code 编写 GLSL的更多相关文章

  1. [6278009]使用Visual Stuido Code 编写Markdown

    使用Visual Stuido Code 编写Markdown void main() { printf("Hello world!"); } void main() { Cons ...

  2. 31 Godoc: documenting Go code 编写良好的文档关于godoc

    Godoc: documenting Go code  编写良好的文档关于godoc 31 March 2011 The Go project takes documentation seriousl ...

  3. 在ubuntu下使用visual studio code编写python

    感觉有了visual studio code之后,不管编写什么语言的代码都可以,简单安装对应的语言插件即可. 这不轮到了最近比较热的python语言,蹭着AI的热度,python语言成为了工程师们又一 ...

  4. 如何使用VS Code编写Spring Boot (第二弹)

    本篇文章是续<如何使用VS Code编写Spring Boot> 之后,结合自己.net经验捣鼓的小demo,一个简单的CRUD,对于习惯了VS操作模式的.net人员非常方便,强大的智能提 ...

  5. vs code编写java

    不知不觉中vs code变得非常强大了,今天小编就分享一下vs code编写java语言.其实除了java语言,还支持很多语言. 首先看下vs code欢迎页面支持哪些语言: 好家伙,支持的东西还真不 ...

  6. CSharpGL(11)用C#直接编写GLSL程序

    CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...

  7. Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)

    我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3. ...

  8. Visual Studio Code编写HTML

    第一步双击打开Visual Studio Code,我们发现什么也没有,但是有一个默认打开的编辑页面.我们先点击File->OpenFoldor 为什么先这么做呢,有两个原因,第一个原因假如你有 ...

  9. 使用Visual Studio Code编写和激活ABAP代码 (上)

    猪年春节后的第一篇,Jerry祝各位猪年大吉! 2019年的六分之一马上就快过完了,不知道大家在新的一年是否给自己定了新的小目标呢?这里Jerry先预祝大家到2019年年底的时候,在年初制定的小目标都 ...

随机推荐

  1. 外链专员怎么做提升自己的seo水平

    http://www.wocaoseo.com/thread-281-1-1.html 我是一个外链专员,想提升自身的seo水平该怎么做? 随着SEO的学习,已经有了一段时间,平时也在思考好多事情,现 ...

  2. “计数质数”问题的常规思路和Sieve of Eratosthenes算法分析

    题目描述 题目来源于 LeetCode 204.计数质数,简单来讲就是求"不超过整数 n 的所有素数个数". 常规思路 一般来讲,我们会先写一个判断 a 是否为素数的 isPrim ...

  3. Qt 最简单的多线程方法QtConcurrent::run()

    Qt 最简单的多线程方法QtConcurrent::run()(转载) 最近编写了一个软件,没有考虑多线程的问题,编好以后,软件在执行计算的时候,鼠标响应有时候会延迟,但是完全能用,考虑到后续随着计算 ...

  4. linux下使用split命令分割文件且文件号从1开始

    Linux里切割大文件的命令如下: split [OPTION] [INPUT [PREFIX]] 选项如下: -a : 指定后缀长度 -b : 每个文件多少字节 -d : 使用数字后缀而不是字母 - ...

  5. linux 下切换Python版本(某用户,共存,替换)

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.你可以按照以下方法使用 ls 命令来查看你的系 ...

  6. 跟着兄弟连系统学习Linux-【day08】

    day08-20200605 p27.软件包管理简 windows 和 linux 软件是不同的版本. Linux源码包,开源的.绝大部分都是C语言写的.源码包安装速度比较慢.需要先编译后再安装.脚本 ...

  7. javascript面试题(二)

    24. function foo() { } var oldName = foo.name; foo.name = "bar"; [oldName, foo.name] // [f ...

  8. 20190926-02Redis五大数据类型之Set 000 028

  9. Spring-代理模式

    代理模式 目录 代理模式 1. 代理模式的分类 2. 静态代理 1. 角色分析 2. 代码步骤 3. 代理的好处 4. 进一步理解 3. 动态代理 1. 角色分析 2. 对动态代理的两个关键类的理解 ...

  10. 动手编写—动态数组(Java实现)

    目录 数组基础回顾 自定义动态数组 动态数组的设计 抽象父类接口设计 抽象父类设计 动态数组之DynamicArray 补充数组缩容 全局的关系图 声明 数组基础回顾 1.数组是一种常见的数据结构,用 ...