simple cyan triangle

This commit is contained in:
2019-07-15 23:07:51 -04:00
parent c03e86cdd3
commit af89079d62

View File

@@ -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);
}
};