美文网首页OpenGL
0012 -- GLSL语言学习(二)

0012 -- GLSL语言学习(二)

作者: 清风烈酒2157 | 来源:发表于2020-08-06 20:14 被阅读0次

[toc]

着色器与程序

需要创建2个基本对象才能用着⾊器进⾏行行渲染: 着⾊器对象和程序对象.

获取链接后着⾊器对象的⼀一般过程包括6个步骤:

  • 创建一个顶点着⾊器对象和一个⽚段着⾊器对象
  • 将源代码链接到每个着⾊器对象
  • 编译着⾊器对象
  • 创建一个程序对象
  • 将编译后的着⾊器对象连接到程序对象
  • 链接程序对象

创建与编译⼀一个着⾊器


GLuint glCreateShader(GLenum type);

type — 创建着⾊器的类型,GL_VERTEX_SHADER 或者GL_FRAGMENT_SHADER
返回值 — 是指向新着⾊器对象的句柄.可以调glDeleteShader删除

void glDeleteShader(GLuint shader);

shader — 要删除的着⾊色器器对象句句柄

void glShaderSource(GLuint shader , GLSizei count ,const GLChar * const *string, const GLint *length);

shader — 指向着⾊器对象的句柄
count — 着⾊色器器源字符串串的数量,着⾊器可以由多个源字符串组成,但是每个着⾊色器器只有⼀一个main函数 string — 指向保存数量量的count 的着⾊色器器源字符串的数组指针
length — 指向保存每个着⾊器字符串⼤小且元素数量量为count 的整数数组指针

void glCompileShader(GLuint shader); 

shader— 需要编译的着⾊器对象句柄


void glGetShaderiv(GLuint shader , GLenum pname , GLint *params );

shader — 需要编译的着⾊器对象句柄
pname — 获取的信息参数,可以为 GL_COMPILE_STATUS/GL_DELETE_STATUS/ GL_INFO_LOG_LENGTH/GL_SHADER_SOURCE_LENGTH/ GL_SHADER_TYPE
params — 指向查询结果的整数存储位置的指针.

void glGetShaderInfolog(GLuint shader , GLSizei maxLength, GLSizei *length , GLChar *infoLog);

shader — 需要获取信息⽇志的着⾊器对象句柄
maxLength — 保存信息日志的缓存区⼤小
length — 写⼊入的信息⽇志的⻓长度(减去null 终⽌止符); 如果不不需要知道⻓长度. 这个参数可以为Null infoLog — 指向保存信息⽇日志的字符缓存区的指针.

GLUint glCreateProgram( )

创建⼀一个程序对象
返回值: 返回⼀一个执行新程序对象的句柄

void glDeleteProgram( GLuint program ) 

program : 指向需要删除的程序对象句柄

//着⾊色器器与程序连接/附着

void glAttachShader( GLuint program , GLuint shader );

program : 指向程序对象的句柄
shader : 指向程序连接的着⾊器对象的句柄

//断开连接

void glDetachShader(GLuint program);

program : 指向程序对象的句柄
shader : 指向程序断开连接的着⾊器对象句柄

glLinkProgram(GLuint program)

program: 指向程序对象句句柄

链接程序之后, 需要检查链接是否成功. 你可以使⽤用glGetProgramiv 检查链接状态:

void glGetProgramiv (GLuint program,GLenum pname, GLint *params);

program: 需要获取信息的程序对象句句柄

pname : 获取信息的参数,可以是:

  1. GL_ACTIVE_ATTRIBUTES
  2. GL_ACTIVE_ATTRIBUTES_MAX_LENGTH
  3. GL_ACTIVE_UNIFORM_BLOCK
  4. GL_ACTIVE_UNIFORM_BLOCK_MAX_LENGTH
  5. GL_ACTIVE_UNIFROMS
  6. GL_ACTIVE_UNIFORM_MAX_LENGTH
  7. GL_ATTACHED_SHADERS
  8. GL_DELETE_STATUS
  9. GL_INFO_LOG_LENGTH
  10. GL_LINK_STATUS
  11. GL_PROGRAM_BINARY_RETRIEVABLE_HINT
  12. GL_TRANSFORM_FEEDBACK_BUFFER_MODE
  13. GL_TRANSFORM_FEEDBACK_VARYINGS
  14. GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
  15. GL_VALIDATE_STATUS

params : 指向查询结果整数存储位置的指针

从程序信息⽇日志中获取信息

void glGetPorgramInfoLog( GLuint program ,GLSizei maxLength, GLSizei *length , GLChar *infoLog )

program : 指向需要获取信息的程序对象句柄
maxLength : 存储信息⽇志的缓存区⼤小
length : 写⼊入的信息⽇志⻓长度(减去null 终⽌止符),如果不不需要知道⻓长度,这个参数可以为Null. infoLog : 指向存储信息⽇志的字符缓存区的指针

void glUseProgram(GLuint program) 

program: 设置为活动程序的程序对象句柄.

FrameBuffer & RenderBuffer

FrameBuffer : 帧缓冲区 包含Color Attachment / Depth Attachment / Stencil Attchment (颜色/深度/模板)
RenderBufer : 渲染缓冲区 实际存储着Depth Buffer / Stencil Buffer,
FrameBuffer是一个管理者,

image.png

为什么要用FrameBufferRenderBuffer?它们是什么关系?

image.png

相关文章

  • 0012 -- GLSL语言学习(二)

    [toc] 着色器与程序 需要创建2个基本对象才能用着⾊器进⾏行行渲染: 着⾊器对象和程序对象. 获取链接后着⾊器...

  • OpenGL学习(二) GLSL语言基础

    前言 我们对顶点数组对象(VAO)和顶点缓存对象(VBO)有了初步的印象之后。我们可以继续接触另一个OpenGL有...

  • 自定义着色器的编写到使用(附图片加载demo)

    GLSL GLSL语言就是编写自定义着色器的语言,Xcode并不支持编译和链接,需要开发者手动去设置。GLSL语言...

  • GLSL语言OpenGLES(二)

    前言 opengl es通过顶点着色器程序和片段着色器程序来实现可编程的渲染,着色器程序也有自己的编程语言简称为G...

  • Open GL - GLSL着色器语言

    Open GL - GLSL着色器语言 GLSL(OpenGL Shading Language) 是一个以C语言...

  • GLSL 中文手册

    GLSL 代表 openGL Shading Language,openGL 着色语言 GLSL 中文手册 基本类...

  • 资料

    多媒体 Android 音视频开发学习思路OpenGL ES 着色器语言GLSL

  • OpenGL ES基础知识回顾

    OpenGL ES基础知识回顾 GLSL着色器语言 语言基础 绘制方式 纹理映射 一、GLSL着色器语言 渲染管线...

  • OpenGL ES 纹理绘制

    本篇文章主要讲解如何使用GLSL语言来进行纹理的绘制。首先我们需要了解如何编写GLSL程序,经过之前的学习我们知道...

  • GLSL语言

    什么是GLSLGLSL(OpenGL Shading Language)OpenGL着色器语言。 GLSL基础类型...

网友评论

    本文标题:0012 -- GLSL语言学习(二)

    本文链接:https://www.haomeiwen.com/subject/qmasrktx.html