#pragma once #include "gl.h" #include #include #include #include #include #include #include namespace cru::platform::gui::sdl { class SdlWindow; class SdlOpenGLRenderer { private: constexpr static auto kLogTag = "cru::platform::gui::sdl::SdlOpenGLRenderer"; public: SdlOpenGLRenderer(SdlWindow* window, int width, int height); ~SdlOpenGLRenderer(); void Resize(int width, int height); std::unique_ptr BeginPaint(); void Present(); private: GLuint CreateGLProgram(); Guard MakeContextCurrent(); private: SdlWindow* window_; SDL_Window* sdl_window_; SDL_WindowID sdl_window_id_; int width_, height_; SDL_GLContext sdl_gl_context_; GladGLContext glad_gl_context_; GLuint gl_shader_program_; GLuint gl_vertex_array_; GLuint gl_vertex_buffer_; GLuint gl_element_buffer_; GLuint gl_texture_; cairo_surface_t* cairo_surface_; cairo_t* cairo_; }; } // namespace cru::platform::gui::sdl