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
반응형
'윈도우 프로그래밍 > OpenGL' 카테고리의 다른 글
OpenGl SuperBible 6 [예제 3-9] 지오메트리 쉐이더 (0) | 2020.07.27 |
---|---|
OpenGl SuperBible 6 [예제 3-8] 테셀레이션 이벨류에이션 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-4] 프래그먼트 쉐이더에서 입력받기 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-2] 버텍스 속성 갱신하기 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 2-9] 삼각형 그리기 (0) | 2020.07.27 |