Path: blob/master/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.cpp
2 views
#ifdef PPU_CPP12#include "cache.cpp"3#include "windows.cpp"4#include "bg.cpp"5#include "oam.cpp"6#include "mode7.cpp"7#include "addsub.cpp"8#include "line.cpp"910//Mode 0: ->11// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1212// BG4B, BG3B, OAM0, BG4A, BG3A, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM313void PPU::render_line_mode0() {14render_line_bg<0, BG1, COLORDEPTH_4>(8, 11);15render_line_bg<0, BG2, COLORDEPTH_4>(7, 10);16render_line_bg<0, BG3, COLORDEPTH_4>(2, 5);17render_line_bg<0, BG4, COLORDEPTH_4>(1, 4);18render_line_oam(3, 6, 9, 12);19}2021//Mode 1 (pri=1): ->22// 1, 2, 3, 4, 5, 6, 7, 8, 9, 1023// BG3B, OAM0, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3, BG3A24//25//Mode 1 (pri=0): ->26// 1, 2, 3, 4, 5, 6, 7, 8, 9, 1027// BG3B, OAM0, BG3A, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM328void PPU::render_line_mode1() {29if(regs.bg3_priority) {30render_line_bg<1, BG1, COLORDEPTH_16>(5, 8);31render_line_bg<1, BG2, COLORDEPTH_16>(4, 7);32render_line_bg<1, BG3, COLORDEPTH_4 >(1, 10);33render_line_oam(2, 3, 6, 9);34} else {35render_line_bg<1, BG1, COLORDEPTH_16>(6, 9);36render_line_bg<1, BG2, COLORDEPTH_16>(5, 8);37render_line_bg<1, BG3, COLORDEPTH_4 >(1, 3);38render_line_oam(2, 4, 7, 10);39}40}4142//Mode 2: ->43// 1, 2, 3, 4, 5, 6, 7, 844// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM345void PPU::render_line_mode2() {46render_line_bg<2, BG1, COLORDEPTH_16>(3, 7);47render_line_bg<2, BG2, COLORDEPTH_16>(1, 5);48render_line_oam(2, 4, 6, 8);49}5051//Mode 3: ->52// 1, 2, 3, 4, 5, 6, 7, 853// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM354void PPU::render_line_mode3() {55render_line_bg<3, BG1, COLORDEPTH_256>(3, 7);56render_line_bg<3, BG2, COLORDEPTH_16 >(1, 5);57render_line_oam(2, 4, 6, 8);58}5960//Mode 4: ->61// 1, 2, 3, 4, 5, 6, 7, 862// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM363void PPU::render_line_mode4() {64render_line_bg<4, BG1, COLORDEPTH_256>(3, 7);65render_line_bg<4, BG2, COLORDEPTH_4 >(1, 5);66render_line_oam(2, 4, 6, 8);67}6869//Mode 5: ->70// 1, 2, 3, 4, 5, 6, 7, 871// BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM372void PPU::render_line_mode5() {73render_line_bg<5, BG1, COLORDEPTH_16>(3, 7);74render_line_bg<5, BG2, COLORDEPTH_4 >(1, 5);75render_line_oam(2, 4, 6, 8);76}7778//Mode 6: ->79// 1, 2, 3, 4, 5, 680// OAM0, BG1B, OAM1, OAM2, BG1A, OAM381void PPU::render_line_mode6() {82render_line_bg<6, BG1, COLORDEPTH_16>(2, 5);83render_line_oam(1, 3, 4, 6);84}8586//Mode7: ->87// 1, 2, 3, 4, 588// OAM0, BG1n, OAM1, OAM2, OAM38990//Mode 7 EXTBG: ->91// 1, 2, 3, 4, 5, 6, 792// BG2B, OAM0, BG1n, OAM1, BG2A, OAM2, OAM393void PPU::render_line_mode7() {94if(regs.mode7_extbg == false) {95render_line_mode7<BG1>(2, 2);96render_line_oam(1, 3, 4, 5);97} else {98render_line_mode7<BG1>(3, 3);99render_line_mode7<BG2>(1, 5);100render_line_oam(2, 4, 6, 7);101}102}103104void PPU::render_line() {105if(regs.display_disabled == true) {106render_line_clear();107return;108}109110flush_pixel_cache();111build_window_tables(COL);112update_bg_info();113114switch(regs.bg_mode) {115case 0: render_line_mode0(); break;116case 1: render_line_mode1(); break;117case 2: render_line_mode2(); break;118case 3: render_line_mode3(); break;119case 4: render_line_mode4(); break;120case 5: render_line_mode5(); break;121case 6: render_line_mode6(); break;122case 7: render_line_mode7(); break;123}124125render_line_output();126}127128#endif129130131