Add example usage of the RAII opengl wrappers

This commit is contained in:
rexy712 2020-08-31 11:17:53 -07:00
parent eb334a2a90
commit 0eb54012dc

View File

@ -15,6 +15,11 @@
#include "audio/mixdata.hpp" #include "audio/mixdata.hpp"
#include "audio/mixer.hpp" #include "audio/mixer.hpp"
#include "graphics/vao.hpp"
#include "graphics/vbo.hpp"
#include "graphics/shader.hpp"
#include "graphics/shader_program.hpp"
// 0 | 1 | 2 // 0 | 1 | 2
// --------- // ---------
// 3 | 4 | 5 // 3 | 4 | 5
@ -142,24 +147,77 @@ void gay_thread(audio::mixer& m, std::atomic_bool& should_gay_thread_stop){
} }
} }
graphics::shader_program create_example_shader(){
static constexpr const char vertex_source[] = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;"
"void main(){"
"gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);"
"}";
static constexpr const char fragment_source[] = "#version 330 core\n"
"out vec4 FragColor;"
"void main(){"
"FragColor = vec4(0.0, 0.5, 0.6, 1.0);"
"}";
graphics::shader_program prog;
graphics::shader vert(vertex_source, graphics::shader::type::VERTEX);
graphics::shader frag(fragment_source, graphics::shader::type::FRAGMENT);
bool error = false;
if(vert.has_compile_error()){
debug_print("%s\n", vert.get_error().c_str());
error = true;
}
if(frag.has_compile_error()){
debug_print("%s\n", frag.get_error().c_str());
error = true;
}
if(error)
return prog;
prog.attach_shaders(vert, frag);
prog.link();
if(prog.has_link_error()){
debug_print("%s\n", prog.get_error().c_str());
}
return prog;
}
int main(){ int main(){
srand(time(NULL)); srand(time(NULL));
audio::mixer mix(audio::mixer::mode::STEREO, 1, 44100);
game_state gs = {}; game_state gs = {};
manager.init(640, 480, "Tic-Tac-Gugh"); manager.init(640, 480, "Tic-Tac-Gugh");
manager.handle_window_close_event(handle_window_close); manager.handle_window_close_event(handle_window_close);
manager.handle_keypress_event(handle_input_events); manager.handle_keypress_event(handle_input_events);
std::atomic_bool should_gay_thread_stop = false; static constexpr float vertices[] = {
std::thread t(gay_thread, std::ref(mix), std::ref(should_gay_thread_stop)); -0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
while(running) //create our gl objects
graphics::vbo vbo(sizeof(vertices), graphics::vbo::usage::STATIC_DRAW);
graphics::shader_program prog = create_example_shader();
graphics::vao vao;
//put the vertex data in the gl state
vbo.buffer(vertices, sizeof(vertices));
//tell gl how to interpret the data in the vbo
vao.bind();
vbo.bind(graphics::buffer::array);
auto attrib = vao.get_attribute(0);
attrib.set_float_pointer(3, 3, 0);
attrib.enable_array_mode();
while(running){
//render using program 'prog' with data from 'vao'
prog.use();
vao.bind();
glDrawArrays(GL_TRIANGLES, 0, 3);
manager.update(); manager.update();
}
should_gay_thread_stop = true;
while(exists_empty_tile(gs) && gs.turn != -1){ while(exists_empty_tile(gs) && gs.turn != -1){
game_turn(gs, get_player_input()); game_turn(gs, get_player_input());
} }
t.join();
} }