OpenGL Shader Key Points (1)
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)的更多相关文章
- OpenGL Shader Key Points (2)
1. Uniform 1.1. Uniform变量 不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等. Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在sh ...
- OpenGL Shader Key Points (3)
Shader和Program Program Link过后,Shader就可以从Program中Detach并删掉.这样是不是可以节省一点点显存呢? 链接到同一个program的vertex和frag ...
- OpenGL Shader in OpenCASCADE
OpenGL Shader in OpenCASCADE eryar@163.com Abstract. As implementation of one of the strategic steps ...
- A Simple OpenGL Shader Example II
A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes f ...
- A Simple OpenGL Shader Example
A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level progr ...
- OpenGL Shader源码分享
Opengl shader程序,旗帜混合纹理加载,通过N张图片,能够组合出数百个:http://www.eyesourcecode.com/thread-39015-1-1.html 用GLSL做了一 ...
- 【玩转cocos2d-x之四十】怎样在Cocos2d-x 3.0中使用opengl shader?
有小伙伴提出了这个问题.事实上GLProgramCocos2d-x引擎自带了.全然能够直接拿来用. 先上图吧. 使用opengl前后的对照: watermark/2/text/aHR0cDovL2Js ...
- web.xml配置web中的key points(上)
一.定义 定义时注意:xml元素是区分大小写的. <web-app></web-app> 这些必须小写 二.url-pattern 1)url-pattern 的值必须以/或者 ...
- Three Key Points of Success 成功三要素
Everyone wants to be successful. Today I would like to share three simple key points of success. Num ...
随机推荐
- list标准函数的模拟
;反序 ( ) -> ( ) (define (rvs x) (let recur ((x x)(res '())) (if (null? x) res (recur (cdr x) (cons ...
- 21 ViewPager RadioGroup
结构 MainActivity.java package com.qf.day21_viewpagerfragmentrg_demo4; import java.util.ArrayList; imp ...
- JAVA面向对象-----接口的概述
接口的概述 **接口(interface):**usb接口,主要是使用来拓展笔记本的功能,那么在java中的接口主要是使用来拓展定义类的功能,可以弥补java中单继承的缺点. class Pencil ...
- J-Robot,能走、能跳舞的机器人
最近一个月基本上没有更新博客了,主要是和朋友一起在捣鼓J-Robot这个机器人,现在基本是可以控制它了,也算是一点小小的成就感吧. 先来几张图片吧. 再来一张: 是否觉得呆呆的?来,Jim ...
- FFmpeg源代码简单分析:avcodec_close()
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- Android中常用开发工具类—持续更新...
一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...
- 【移动开发】SharedPreferences的兼容版本
public class SharedPreferencesCompat { private static final String TAG = SharedPreferencesCompat.cla ...
- Android开发中StackOverflowError
Android开发中StackOverflowError错误实例分析 一.概述 我在一个复杂的layout嵌套较多的android界面,碰到了java.lang.StackOverflowError这 ...
- 3、Android构建仪表测试
不同于运行于JVM的本地单元测试,仪表测试运行于你的物理设备或虚拟机中.当你需要访问设备的信息(比如Context)或者使用真正的Android framework组件时(比如SharePrefere ...
- Hadoop:Hadoop简介及环境配置
http://blog.csdn.net/pipisorry/article/details/51243805 Hadoop简介 下次写上... 皮皮blog 配置hadoop环境可能出现的问题 每次 ...