diff options
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/game.cpp b/src/game.cpp index 196b735..b1c7af8 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1,4 +1,5 @@ #include "game.hpp" +#include "image_loader.hpp" #include "sprite.hpp" #include <stdexcept> @@ -31,7 +32,18 @@ void Game::initSystems() throw std::runtime_error("glewInit failed"); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - glClearColor(0.f, 0.f, 1.f, 1.f); + glClearColor(0.f, 0.f, 0.f, 1.f); + + initShaders(); +} + +void Game::initShaders() +{ + program_.compileShaders("res/shaders/color_shading.vert", "res/shaders/color_shading.frag"); + program_.addAttribute("vertex_position"); + program_.addAttribute("vertex_color"); + program_.addAttribute("vertex_uv"); + program_.linkShaders(); } void Game::processInput() @@ -49,14 +61,12 @@ void Game::processInput() } void Game::gameLoop() -{ - Sprite sprite; - sprite.init(-1.f, -1.f, 1.f, 1.f); +{ while(game_state_ != GameState::EXIT) { processInput(); - sprite.draw(); drawGame(); + time_ += 0.05; } } @@ -65,6 +75,21 @@ void Game::drawGame() glClearDepth(1.0); // clears buffer with clear color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + program_.use(); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, player_texture_.id); + + GLint texture_location = program_.getUniformLocation("sampler"); + glUniform1i(texture_location, 0); + + GLint time_location = program_.getUniformLocation("time"); + glUniform1f(time_location, time_); + + sprite_.draw(); + + glBindTexture(GL_TEXTURE_2D, 0); + program_.unuse(); // swap buffer and draw everything to the screen SDL_GL_SwapWindow(window_); @@ -73,5 +98,9 @@ void Game::drawGame() void Game::run() { initSystems(); + + sprite_.init(-1.f, -1.f, 2.f, 2.f); + player_texture_ = ImageLoader::loadPng("res/platformer_png/Player/p1_front.png"); + gameLoop(); } |