300x250
반응형

2.2 쉐이더 사용하기

[예제 2-5]

 

#include <sb7.h>

class singlepoint_app : public sb7::application
{
    void init()
    {
        static const char title[] = "OpenGL SuperBible - Single Point";

        sb7::application::init();

        memcpy(info.title, title, sizeof(title));
    }

    virtual void startup()
    {
        static const char * vs_source[] =
        {
            "#version 420 core                             \n"
            "                                              \n"
            "void main(void)                               \n"
            "{                                             \n"
            "    gl_Position = vec4(0.0, 0.0, 0.5, 1.0);   \n"
            "}                                             \n"
        };

        static const char * fs_source[] =
        {
            "#version 420 core                             \n"
            "                                              \n"
            "out vec4 color;                               \n"
            "                                              \n"
            "void main(void)                               \n"
            "{                                             \n"
            "    color = vec4(0.0, 0.8, 1.0, 1.0);         \n"
            "}                                             \n"
        };



		/* 쉐이더 */
		// Vertex Shader 위치 정보
		// Fragment Shader 색상
		// Geometry Shader 정점 변환

        program = glCreateProgram(); // 쉐이더 프로그램 생성


        GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); // 1번 쉐이더 생성
        glShaderSource(fs, 1, fs_source, NULL);
        glCompileShader(fs);

        GLuint vs = glCreateShader(GL_VERTEX_SHADER); // 2번 쉐이더 생성
        glShaderSource(vs, 1, vs_source, NULL);
        glCompileShader(vs);



        glAttachShader(program, vs); // 프로그램에 사용될 쉐이더 등록
		glAttachShader(program, fs); // 프로그램에 사용될 쉐이더 등록

        glLinkProgram(program);

        glGenVertexArrays(1, &vao);
        glBindVertexArray(vao);
    }

    virtual void render(double currentTime)
    {
        static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
        glClearBufferfv(GL_COLOR, 0, red);

        glUseProgram(program);

        glPointSize(40.0f);

        glDrawArrays(GL_POINTS, 0, 1);
    }

    virtual void shutdown()
    {
        glDeleteVertexArrays(1, &vao);
        glDeleteProgram(program);
    }

private:
    GLuint          program;
    GLuint          vao;
};

DECLARE_MAIN(singlepoint_app)

 

 

쉐이더 종류

 - Vertex Shader 위치 정보
 - Fragment Shader 색상
 - Geometry Shader 정점 변환

 

 

 

300x250
반응형

+ Recent posts