2018년 3월 13일 화요일

3-[1,2] Shader로 데이터 전달, 스테이지간 데이터 전달


  1. Vertex shader
    1. 유일한 필수 스테이지
    2. 첫 번째 프로그래밍 가능한 스테이지
    3. 입력 제공을 위해 고정 함수 스테이지(버텍스 패칭 또는 버텍스 풀링)이
      먼저 실행됨
    4. <in>
      1. vertex shader의 입력
      2. Shader Example
        1. #version 430 core
          layout (location = 0) in vec4 offset;
          void main(void)
          {
              gl_Position = offset;
          }
      3. 변수에 값을 넣는 방법?
        1. glVertexAttrib
          1. void glVertexAttrib4fv(GLuint index, const GLfloat *v);
            1. https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glVertexAttrib.xhtml
            2. index
              1. shader에서 offset 선언 시
                "location = x" 의 x와 동일하다.
      4. 매 프레임마다 vertex attrib 갱신 가능.
  1. 스테이지 간 데이터 전달
    1. Vertex shader
      1. #version 430 core

        layout (location = 0) in vec4 color;

        out vec4 vs_color;

        void main(void)
        {
            vs_color = color;
        }
    2. Fragment shader
      1. #version 430 core

        in vec4 vs_color;
        out vec4 color;

        void main(void)
        {
            color = vs_color;
        }
    3. 인터페이스 블록
      1. 여러 변수를 하나의 interface block 으로 그룹화
      2. Vertex shader
        1. layout (location=0) in vec4 color;

          out VS_OUT
          {
              vec4 color;
          } vs_out;

          void main(void)
          {
              vs_out.color = color;
          }
      3. Fragment shader
        1. in VS_OUT
          {
              vec4 color;
          } fs_in;

          out vec4 color;

          void main(void)
          {
              color = fs_in.color;
          }

댓글 없음:

댓글 쓰기