A 2D tile-based sandbox game.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "Window.h"
  2. #include <SDL.h>
  3. #include <SDL_opengles2.h>
  4. #include "util.h"
  5. namespace Cygnet {
  6. struct WindowState {
  7. SDL_Window *window;
  8. SDL_GLContext glctx;
  9. };
  10. Window::Window(const char *name, int w, int h):
  11. state_(std::make_unique<WindowState>()), w_(w), h_(h) {
  12. state_->window = SDL_CreateWindow(name,
  13. SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, w, h,
  14. SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE |
  15. SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL);
  16. sdlCheck(state_->window != NULL);
  17. state_->glctx = SDL_GL_CreateContext(state_->window);
  18. glCheck();
  19. makeCurrent();
  20. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  21. glEnable(GL_BLEND);
  22. glCheck();
  23. SDL_GetWindowSize(state_->window, &w, &h);
  24. onResize(w, h);
  25. }
  26. Window::~Window() = default;
  27. void Window::makeCurrent() {
  28. SDL_GL_MakeCurrent(state_->window, state_->glctx);
  29. glCheck();
  30. }
  31. void Window::clear() {
  32. glClear(GL_COLOR_BUFFER_BIT);
  33. glCheck();
  34. }
  35. void Window::flip() {
  36. SDL_GL_SwapWindow(state_->window);
  37. glCheck();
  38. }
  39. void Window::onResize(int w, int h) {
  40. w_ = w;
  41. h_ = h;
  42. glViewport(0, 0, w, h);
  43. glCheck();
  44. }
  45. }