nes/examples/sdl/main.cpp

46 lines
1.4 KiB
C++

#include "../../src/Nes.h"
#include "Window.h"
#include "SdlKeyboardController.h"
#include <functional>
#include <thread>
int main() {
using namespace std::placeholders;
nes::Nes device;
nes::SdlWindow window(nes::Ppu::SCREEN_WIDTH, nes::Ppu::SCREEN_HEIGHT);
window.setSize(nes::Ppu::SCREEN_WIDTH * 4, nes::Ppu::SCREEN_HEIGHT * 4);
SDL_Event e;
bool frameRendered = false;
device.setNewFrameCallback([&window, &e, &frameRendered](auto buffer){
window.drawFrame(buffer);
while(SDL_PollEvent(&e));
frameRendered = true;
});
device.connect(std::make_shared<SdlKeyboardController>());
//device.insertCartridge("/home/selim/Downloads/dk.nes");
device.insertCartridge("/Users/selim/Documents/smb.nes");
//device.insertCartridge("C:\\Users\\selim\\Documents\\nestest.nes");
auto frameStart = std::chrono::steady_clock::now();
while (true) {
device.tick();
if(frameRendered) {
auto renderingTime = std::chrono::steady_clock::now();
auto elapsedTime = std::chrono::duration_cast<std::chrono::nanoseconds>(renderingTime - frameStart).count();
int64_t waitTime = 1000000000/60 - elapsedTime;
if(waitTime > 0) {
std::this_thread::sleep_for(std::chrono::nanoseconds(waitTime));
}
frameStart = std::chrono::steady_clock::now();
frameRendered = false;
}
}
return 0;
}