OpenGL学习笔记(二)

第一部分:ios下的红宝书的第一个程序修改办法:

参照地址:http://leohope.com/解问题/2017/04/19/OpenGLon-macOS/

第二部分:着色器基础(红宝书第二版第八章)

总结一下自己看的内容:

(1)OpenGL的可编程管线的四个处理阶段

A.  Vertex shading stage

B. tessellation shading stage

C. geometry shading stage

D.  Fragment shading stage

E. Compute shading stage

(2)变量(声明、初始化、构造函数、聚合类型、结构体、数组)

(3)存储限制符 需注意的点:




(4)语句

    算术符操作:注意操作符与优先级

    操作符重载:GLSL中的操作符大部分都是经过重载的,也就是说他们可以应用于多种类型的数据操作

    流控制:if-else;switch

    循环语句:支持C语言形式的for、while、do……while

    流控制语句:除与C语言相同的break、continue、return之外,注意discard是丢弃当前的片元,终止着色器的执行,用于当前的着色器中

    函数:变量名需要加访问修饰符

    参数限制符:

        in:将数据拷贝到函数中

        const in:将只读数据拷贝到函数中

        out:从函数中获取数值

        inout将数据拷贝到函数中,并且返回函数中修改数据

(5)计算不变性:

    有两种方法来确保着色器之间的计算不变性

    A.invariant:可以设置任何着色器的输出变量。可以确保如果两个着色器的输出变量使用了同样的数值,最终输出的数值相同

        eg:invariant gl_Position;

              invariant centroid out vec3 Color;

     B.precise:可设置计算中任何变量或者函数的值    

(6)着色器的预处理

    宏定义:不支持字符串的替换以及预编译链接符

       #ifdef

        #endif

(7)数据块接口:着色器各阶段之间的共享变量可以组织为变量块的形式

    uniform:

    如果要对uniform块总的uniform变量进行初始化,第一步就是要找到块所在的索引位置 

    GLuint glGetUniformBlockIndex(GLuint Program,const char *UniformBlockname )  

    之后需要一个缓存对象与这个块进行关联,最常见的就是调用void glBindBufferRange()如果uniform块全是使用缓存来存储的,n那么可以使用glBindBufferBase()

    Buffer块:着色器的存储缓存对象:着色器可以写入buffer块,修改其中的内容并且呈现给其他的着色器或者调用应用程序本身

      可以在渲染之前决定他的大小,而不是编译和链接的时候。

    in/out块

(7)着色器编译:

    创建编译器:glCreatShader()

    将着色器的源码关联到这个对象上glShaderSource()

    编译着色器对象的源代码 glCompileShader()

    返回shader的编译结果:void glShaderInfoLog()

    当创建并链接了所有必要的着色器对象之后,

    下一步就是链接他们已创建一个可执行的着色器程序 GLuinx glCreatProgram()

    下一步关联的必要的着色器上glAttachShader()移除的着色器glDetachShader()

    下一步就可以链接对象生成可执行的程序,要调用函数glLinkProgram()

    查询链接操作的结果:glGetProgramiv(),获取链接日志信息并且判断错误原因:glGetProgramInfoLog()

    如果我们成功地完成了程序的链接,那么就可以调用函数glUseProgram(),并且参数设置为程序对象的句柄来启用顶点或者片元程序

    最后,当着色器任务完成之后,通过glDeleteShader()将它删除


    

    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值