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绑定

  • 相关阅读:
    (转)C++ typename的起源与用法
    EOS智能合约深度解析
    cmake常用变量和命令解析
    (转)Linux下source命令详解
    eosio_install.sh执行过程
    java之collection总结
    Guava之RangeMap
    java file.listFiles()按文件名称、日期、大小排序
    Java下载文件的几种方式
    Java泛型Class<T>、T与Class<?>
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333113.html
Copyright © 2011-2022 走看看