Home OpenGL [07] 지오메트리 쉐이더
Post
Cancel

OpenGL [07] 지오메트리 쉐이더

지오메트리 쉐이더는 프리미티브당 한 번 수행되며, 수행되는 프리미티브를 구성하는 모든 버텍스에 대한 입력 버텍스 데이터에 접근할 수 있다. 다른 고유한 기능으로 파이프라인 중간에 프리미티브의 모드를 변경하는 기능이 있다. 예를 들면 삼각형들을 입력으로 하여 여러 점이나 선을 출력으로 만들어낼 수 있다.

아래 코드와 같이 말이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
geometry_shader_source = """
#version 430 core
layout(triangles) in;
layout(points, max_vertices=3) out;

void main()
{
    int i;

    for (i=0; i<gl_in.length(); i++)
    {
        gl_Position = gl_in[i].gl_Position;
        EmitVertex();
    }
}
"""

geometry_shader = shaders.compileShader(geometry_shader_source, GL_GEOMETRY_SHADER)
shader = shaders.compileProgram(..., geometry_shader, ...)

첫 번째 레이아웃 지시어를 통해 지오메트리 쉐이더가 삼각형을 입력으로 받는다는 것을 알 수 있다.

두 번째 레이아웃 지시어는 지오메트리 쉐이더가 점을 생성할 때 각 쉐이더가 생성하는 점의 최대 개수가 3이라는 것을 OpenGL에 알려준다.


코드 결과는 아래와 같다.

gl_geometry_shader

전체 코드는 [깃허브] 를 확인하면 된다.

Reference

• OpenGL Super Bible 개정 6판

This post is licensed under CC BY 4.0 by the author.

OpenGL [06] 테셀레이션

OpenGL [08] 데이터(1) - 버퍼

Trending Tags