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. Linux--NFS和DHCP服务器

     (1) 在网络中,时常需要进行文件的共享,如果都是在Linux系统下,可以使用NFS 来搭建文件服务器,达到文件共享的目的. (2) 在网络管理中,为了防止IP 冲突和盗用,有效的控制IP 资源 ...

  2. 剑指Offer——腾讯+360+搜狗校招笔试题+知识点总结

    剑指Offer--腾讯+360+搜狗校招笔试题+知识点总结 9.11晚7:00,腾讯笔试.选择题与编程.设计题单独计时. 栈是不是顺序存储的线性结构啊? 首先弄明白两个概念:存储结构和逻辑结构. 数据 ...

  3. UNIX环境高级编程——创建孤儿进程

    /* 创建孤儿进程 父进程终止后,向子进程发送挂断信号,又接着发送继续信号. */ #include <stdio.h> #include <stdlib.h> #includ ...

  4. SSH网上商城---使用ajax完成用户名是否存在异步校验

    小伙伴在上网的时候,需要下载或者观看某些视频资料,更或者是在逛淘宝的时候,我们都需要注册一个用户,当我们填写好各种信息,点击确定的时候,提示用户名已经存在,小编就想,为什么当我们填写完用户名的时候,她 ...

  5. 1073. Scientific Notation (20)

    题目如下: Scientific notation is the way that scientists easily handle very large numbers or very small ...

  6. quartz 时间设置(定时任务scheduler)

    quartz用来设置定时任务的作业调度程序.在linux的crontab中用到. 格式为: * * * * * * * 其从左到右顺序代表 :[秒] [分] [小时] [日] [月] [周] [年] ...

  7. 错误:One or more post-processing actions failed. Consult the OPP service log for details

     今天在做采购出入库明细报表的时候,有的时候能正常打印,有的时候报 One or more post-processing actions failed. Consult the OPP serv ...

  8. PLSQL解析XML文件

     参考网上资料学习汇总 在PL/SQL中利用XML ,Oracle提供了几个组件,让开发人员能轻松地利用XML技术.这些组件包括: 1.  XML 分析程序.即用来分析.构造和验证XML文档.. ...

  9. 后端分布式系列:分布式存储-MySQL 数据库事务与复制

    好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适.最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类.结合实际工作中碰到的问题,以寻找答案的方式来剖 ...

  10. Android进阶(四)一个APP引发的思索之ArrayList的add总是添加相同的值

    解决"ArrayList的add总是添加相同的值"问题 前言 最近在写一个小的Android APP,在用ArrayList的add时,总是出现添加相同值的现象.如下图所示: 错误 ...