nes/examples/sdl/Window.h

44 lines
1.1 KiB
C++

//
// Created by Мустафаев Селим Мустафаевич on 24.08.2023.
//
#ifndef NES_WINDOW_H
#define NES_WINDOW_H
#include "../../src/Ppu.h"
#include <SDL.h>
#include <memory>
namespace nes {
class SdlWindow {
public:
struct SdlDeleter {
void operator()(SDL_Window* ptr) { SDL_DestroyWindow(ptr); }
void operator()(SDL_Renderer* ptr) { SDL_DestroyRenderer(ptr); }
void operator()(SDL_Texture* ptr) { SDL_DestroyTexture(ptr); }
};
template<typename T> using SdlUniquePtr = std::unique_ptr<T, SdlDeleter>;
using SdlWindowPtr = SdlUniquePtr<SDL_Window>;
using SdlRendererPtr = SdlUniquePtr<SDL_Renderer>;
using SdlTexturePtr = SdlUniquePtr<SDL_Texture>;
public:
SdlWindow(uint16_t width, uint16_t height);
void drawFrame(const Pixel* buffer);
void setSize(int width, int height);
private:
uint16_t _width;
uint16_t _height;
SdlWindowPtr _wnd;
SdlRendererPtr _renderer;
SdlTexturePtr _texture;
};
}
#endif //NES_WINDOW_H