private void UpdateScreen(RenderWindow window) { if (ppu.ppu_scanline == 0 && ppu.isbackgroundrendering) { window.Clear(); GuiImpl.Update(window, clock.Restart()); if (gui.filemanager) { gui.LoadFile(window, clock); Reset(); return; } gui.RenderUI(window, clock); if (ppu.isbackgroundrendering) { RenderFrame(window); } GuiImpl.Render(window); window.Display(); } }
private void RenderFrame() { bool wopen = false; emutex.Update(gfxdata); emusprite.Texture = emutex; uint id = emusprite.Texture.NativeHandle; if (ImGui.Begin("Nes Sharp", ref wopen)) { ImGui.SetWindowPos(new ImVec2(0, 25)); ImGui.SetWindowSize(new ImVec2(512, 480)); ImGui.Image((IntPtr)id, new ImVec2(512, 464)); } GuiImpl.Render(window); window.Display(); }
private void UpdateReset(RenderWindow window) { GuiImpl.Update(window, clock.Restart()); if (gui.resetemu) { Reset(); emustate = State.Running; return; } gui.MainMenu(); gui.LoadFile(window, clock); if (emustate == State.Running) { Reset(); } GuiImpl.Render(window); window.Display(); }
public void LoadFile(RenderWindow window, Clock clock) { while (filemanager && window.IsOpen) { window.DispatchEvents(); GuiImpl.Update(window, clock.Restart()); window.Clear(); MainMenu(); DebuggerView(window, clock); if (filemanager) { int romselectindex = 0; if (ImGui.Begin("Open Rom")) { string folder = "roms"; string[] files = Directory.EnumerateFiles("roms", "*.nes").Select(Path.GetFileName).ToArray(); ImGui.PushItemWidth(-1); ImGui.SetWindowPos(new ImVec2(0, 25)); ImGui.SetWindowSize(new ImVec2(256, window.Size.Y)); if (ImGui.ListBox("##Roms", ref romselectindex, files, files.Length, 20)) { gamename = folder + "/" + files[romselectindex]; c.emustate = State.Running; filemanager = false; } ImGui.PopItemWidth(); ImGui.End(); } } GuiImpl.Render(window); window.Display(); } }
public void Run() { var window = new RenderWindow(new SFML.Window.VideoMode(256, 240), "Nes Sharp"); GuiImpl.Init(window); window.Closed += (s, e) => window.Close(); window.Size = new Vector2u(window.Size.X * 6 - 120, window.Size.Y * 4); window.Position = new Vector2i(20, 20); window.SetFramerateLimit(60); emustate = State.Reset; gui = new Gui(); Initialize(window); gui.filemanager = true; SetAppStyle(); while (window.IsOpen) { window.DispatchEvents(); if (!window.IsOpen) { break; } switch (emustate) { case State.Running: cpu.Step(); if (!cpu.Breakmode) { ppu.RenderScanline(); } if (cpu.Breakmode) { emustate = State.Debug; } UpdateScreen(window); break; case State.Reset: UpdateReset(window); break; case State.Debug: //window.Clear(); GuiImpl.Update(window, clock.Restart()); gui.RenderUI(window, clock); RenderFrame(window); GuiImpl.Render(window); window.Display(); break; } } if (cpu != null && mapper != null && mapper.ram != null) { File.WriteAllBytes("ram.bin", mapper.ram); File.WriteAllBytes("vram.bin", mapper.vram); } GuiImpl.Shutdown(); }