simple cyan triangle
This commit is contained in:
@@ -62,6 +62,7 @@ public:
|
||||
|
||||
class CosetsWindow : public Window {
|
||||
GLint program;
|
||||
GLuint vao;
|
||||
|
||||
GLint build_shader(GLenum type, const string &name, const string &src) {
|
||||
const char *c_str = src.c_str();
|
||||
@@ -78,36 +79,73 @@ class CosetsWindow : public Window {
|
||||
char log[log_len];
|
||||
glGetShaderInfoLog(s, log_len, nullptr, log);
|
||||
fprintf(stderr, "SHADER LOG (%s):\n%s", name.c_str(), log);
|
||||
|
||||
glDeleteShader(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
GLint build_program(const string &name, GLint vs, GLint fs) {
|
||||
GLint p = glCreateProgram();
|
||||
glAttachShader(p, vs);
|
||||
glAttachShader(p, fs);
|
||||
glLinkProgram(p);
|
||||
|
||||
GLint stat;
|
||||
glGetProgramiv(p, GL_LINK_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLint log_len;
|
||||
glGetShaderiv(p, GL_INFO_LOG_LENGTH, &log_len);
|
||||
char log[log_len];
|
||||
glGetProgramInfoLog(p, log_len, nullptr, log);
|
||||
fprintf(stderr, "SHADER LOG (%s):\n%s", name.c_str(), log);
|
||||
|
||||
glDeleteProgram(p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
public:
|
||||
void init() override {
|
||||
auto vs = build_shader(GL_VERTEX_SHADER, "vertex",
|
||||
"#version 400\n"
|
||||
""
|
||||
"void main(){"
|
||||
" int"
|
||||
" float x = gl_VertexID % 2;"
|
||||
" float y = gl_VertexID / 2;"
|
||||
" gl_Position = vec4(x, y, 0, 1);"
|
||||
"}");
|
||||
|
||||
auto fs = build_shader(GL_FRAGMENT_SHADER, "fragment",
|
||||
"#version 400\n"
|
||||
""
|
||||
"void main(){"
|
||||
" int"
|
||||
" gl_FragColor = vec4(0, 1, 1, 0);"
|
||||
"}"
|
||||
);
|
||||
|
||||
program = glCreateProgram();
|
||||
glAttachShader(program, vs);
|
||||
glAttachShader(program, fs);
|
||||
glLinkProgram(program);
|
||||
program = build_program("main", vs, fs);
|
||||
|
||||
glGenVertexArrays(1, &vao);
|
||||
}
|
||||
|
||||
void render() override {
|
||||
int w, h;
|
||||
getBounds(w, h);
|
||||
glViewport(0, 0, w, h);
|
||||
|
||||
glBindVertexArray(vao);
|
||||
glUseProgram(program);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
|
||||
swapbuffers();
|
||||
}
|
||||
|
||||
void deinit() override {
|
||||
glDeleteProgram(program);
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user