1.  Shader起步

1.1.  可编程管线

仅考虑Vertex shader和fragment shader:

1.2.  Shader Object

在编译阶段生成,把shader源代码编译成Shader 对象。

Shader对象分类

  • Vertex Shader
  • Fragment Shader
  • Geometry Shader
  • Tess EvaluationShader
  • Tess ControlShader

API:

glCreateShader
glCompileShader
glDeleteShader
glGetShaderiv
glGetShaderInfoLog

1.3.  Shader Program

在链接阶段,创建shader程序,链接shader对象。

API:

glCreateProgram
glAttachShader
glLinkProgram
glUseProgram
glDeleteProgram
glGetProgramiv
glGetProgramInfoLog

2.  Shader编程入门

2.1.  编写Shader

Vertex Shader:

#version 400
in vec3 VertexPosition;
in vec3 VertexColor;
out vec3 Color; void main()
{
Color = VertexColor;
gl_Position = vec4(VertexPosition,1.0);
}

// Color: 输出变量,在fragment shader中使用

// gl_position: 内建的输出变量

Fragment Shader:

#version 400
in vec3 Color;
out vec4 FragColor;
void main()
{
FragColor = vec4(Color, 1.0);
}

2.2.  绑定参数

定义顶点属性索引与vertex shader输入变量之间的映射关系

glBindAttribLocation(programHandle,0, "VertexPosition");

glBindAttribLocation(programHandle,1, "VertexColor");

glBindFragDataLocation(programHandle,0, "FragColor");

2.3.  创建几何对象

Buffer对象 (VBO)

glGenBuffers  // 创建buffer对象

glBindBuffer // 指定当前要绑定的VBO

glBufferData// 设置Buffer对象数据

VertexArray对象(VAO):把VBO组装成VAO

glGenVertexArrays

glBindVertexArray //指定当前要绑定的VAO

glEnableVertexAttribArray //启用渲染使用的Buffer

glBindBuffer// 指定当前要绑定的VBO

glVertexAttribPointer//设置VAO如何使用的VBO数据

2.4.  绘制几何对象

glBindVertexArray//指定当前要绑定的VAO

glDrawArrays//绘制图元格式

2.5.  技巧

2.5.1.  layout qualifiers

在shader中指定输入参数对应的vertex buffer index

layout (location = 0) in vec3 VertexPosition;

layout (location = 1) in vec3 VertexColor;

layout (location = 0) out vec4 FragColor;

2.5.2.  element arrays

使用index buffer

2.5.3.  Interleaved arrays

用一个buffer object存放vertex的多个属性。

不建议使用。

OpenGL Shader Key Points (1)的更多相关文章

  1. OpenGL Shader Key Points (2)

    1.  Uniform 1.1.  Uniform变量 不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等. Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在sh ...

  2. OpenGL Shader Key Points (3)

    Shader和Program Program Link过后,Shader就可以从Program中Detach并删掉.这样是不是可以节省一点点显存呢? 链接到同一个program的vertex和frag ...

  3. OpenGL Shader in OpenCASCADE

    OpenGL Shader in OpenCASCADE eryar@163.com Abstract. As implementation of one of the strategic steps ...

  4. A Simple OpenGL Shader Example II

    A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes f ...

  5. A Simple OpenGL Shader Example

    A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level progr ...

  6. OpenGL Shader源码分享

    Opengl shader程序,旗帜混合纹理加载,通过N张图片,能够组合出数百个:http://www.eyesourcecode.com/thread-39015-1-1.html 用GLSL做了一 ...

  7. 【玩转cocos2d-x之四十】怎样在Cocos2d-x 3.0中使用opengl shader?

    有小伙伴提出了这个问题.事实上GLProgramCocos2d-x引擎自带了.全然能够直接拿来用. 先上图吧. 使用opengl前后的对照: watermark/2/text/aHR0cDovL2Js ...

  8. web.xml配置web中的key points(上)

    一.定义 定义时注意:xml元素是区分大小写的. <web-app></web-app> 这些必须小写 二.url-pattern 1)url-pattern 的值必须以/或者 ...

  9. Three Key Points of Success 成功三要素

    Everyone wants to be successful. Today I would like to share three simple key points of success. Num ...

随机推荐

  1. Lua热更新(hotfix)

    Lua热更新(hotfix)(金庆的专栏)hotfixLua 5.2/5.3 hotfix. Hot update functions and keep old data.https://github ...

  2. [extjs5学习笔记]第三十七节 Extjs6预览版都有神马新东西

    本文在微信公众号文章地址:微信公众号文章地址 本文地址:http://blog.csdn.net/sushengmiyan/article/details/45190485 [TOC] 在Ext JS ...

  3. linux简单命常用令

    Linux常用命令总结 切换:cd tmp cd/tmp/yun cd 切换到host目录 cd .. 显示:ll Top显示系统情况 Netstat显示网络情况 Ifconfig显示网络配置 Mor ...

  4. JSP自定义方法库

    如果JSTL的方法库没有满足需要,可以使用自定义方法进行扩展 public class Function{ public static int length(Object obj){ //返回对象的长 ...

  5. Android Studio安装Genymotion插件

    Android Studio安装Genymotion插件 Eclipse就不介绍了,谷歌都已经放弃Eclipse了,你还在坚持什么. 安装Genymotion 官网:https://www.genym ...

  6. Dynamics CRM2015 页面导航栏顶部全局快速查找功能配置

    在CRM2015中微软加入了新的快速查找功能,让你的数据查找更加方便,功能栏如下图所示,直接可以框中输入搜索项进行搜索. 但该功能是需要进行些配置,具体的配置在设置-管理-系统设置中,默认的就是红框中 ...

  7. iOS中监控软键盘显示或隐藏的可靠方法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 如果你试图在软键盘的显示或隐藏时去改变的UI界面结构,仅有的方 ...

  8. RocketMQ,JStorm与Tair使用笔记

    关于RocketMQ 启动mq nohup sh mqnamesrv -n 10.150.0.94:9876 &  nohup sh mqbroker -n 10.150.0.94:9876 ...

  9. 18 UI美化自定义形状shape

    自定义某个控件的形状 如 圆角 巨型 环形 : 在工程文件的新建 res/drawable/shape文件(以下键一个圆角) <?xml version="1.0" enco ...

  10. 从浏览器直接转跳到APP具体页面---(魔窗)MagicWindow使用教程

    想要实现在网页里一键调到你APP的指定页面吗,好比打开 JD的一个商品的网页,从网页调到APP这个商品的页面.APP服务化, 使用魔窗SDK可以轻松实现! 老规矩:效果图奉上 1.注册魔窗账号,创建A ...