zoukankan      html  css  js  c++  java
  • OpenGL Shader Key Points (2)


    1.  Uniform

    1.1.  Uniform变量

    不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等。

    Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在shader中给它赋值,只能在C/C++程序中指定。

    layout (location = 0) in vec3 VertexPosition;
    layout (location = 1) in vec3 VertexColor;
    out vec3 Color;
    uniform mat4 RotationMatrix;
    void main()
    {
    Color = VertexColor;
    gl_Position = RotationMatrix *vec4(VertexPosition,1.0);
    }
     


    在程序中指定uniform的值:

    GLuint location =glGetUniformLocation(programHandle,  "RotationMatrix");
    if( location >= 0 )
    {
    glUniformMatrix4fv(location, 1, GL_FALSE,  &rotationMatrix[0][0]);
    }


    API:

             遍历shader program所有的uniform变量

             glGetProgramiv

    glGetActiveUniform

    glGetActiveUniformName

    glGetUniformLocation

    1.2.  Uniform blocks

    单独的uniform变量是跟shader program绑定的,因而不能在多shader program中共享。

    Uniform blocks用来在不同的shaderprogram中共享uniform数据。

    API:

    glGetUniformBlockIndex //根据名称找到uniformblocks的索引

    glGetActiveUniformBlockiv //根据索引找到blocks的大小

    glGetUniformIndices//根据uniform blocks的各分量的名字找到索引

    glGetActiveUniformsiv//找到各分量的便宜量,这样就可以分配block并设置分量的值。

    1.2.1.  创建uniform buffer object (UBO):

    GL_UNIFORM_BUFFER

    glGenBuffers

    glBindBuffer

    glBufferData

    glBindBufferBase // UBO与uniformblocks绑定

  • 相关阅读:
    ios 学习小笔记
    object c 2.0 @property属性
    uiPickerView 滚动盘
    ios 文件操作
    ios多窗体项目
    Linux命令
    Mina的使用
    设计模式学习总结访问者模式(Visitor Method)
    socket, nio socket 及nio socket框架MINA总结
    UML类图与类的关系详解UML一波流系列(转转)
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333113.html
Copyright © 2011-2022 走看看