Path: blob/master/libsnes/bsnes/snes/alt/ppu-performance/window/window.cpp
2 views
#ifdef PPU_CPP12void PPU::LayerWindow::render(bool screen) {3uint8 *output;4if(screen == 0) {5output = main;6if(main_enable == false) {7memset(output, 0, 256);8return;9}10} else {11output = sub;12if(sub_enable == false) {13memset(output, 0, 256);14return;15}16}1718if(one_enable == false && two_enable == false) {19memset(output, 0, 256);20return;21}2223if(one_enable == true && two_enable == false) {24bool set = 1 ^ one_invert, clr = !set;25for(unsigned x = 0; x < 256; x++) {26output[x] = (x >= ppu.regs.window_one_left && x <= ppu.regs.window_one_right) ? set : clr;27}28return;29}3031if(one_enable == false && two_enable == true) {32bool set = 1 ^ two_invert, clr = !set;33for(unsigned x = 0; x < 256; x++) {34output[x] = (x >= ppu.regs.window_two_left && x <= ppu.regs.window_two_right) ? set : clr;35}36return;37}3839for(unsigned x = 0; x < 256; x++) {40bool one_mask = (x >= ppu.regs.window_one_left && x <= ppu.regs.window_one_right) ^ one_invert;41bool two_mask = (x >= ppu.regs.window_two_left && x <= ppu.regs.window_two_right) ^ two_invert;42switch(mask) {43case 0: output[x] = one_mask | two_mask == 1; break;44case 1: output[x] = one_mask & two_mask == 1; break;45case 2: output[x] = one_mask ^ two_mask == 1; break;46case 3: output[x] = one_mask ^ two_mask == 0; break;47}48}49}5051//5253void PPU::ColorWindow::render(bool screen) {54uint8 *output = (screen == 0 ? main : sub);55bool set = 1, clr = 0;5657switch(screen == 0 ? main_mask : sub_mask) {58case 0: memset(output, 1, 256); return; //always59case 1: set = 1, clr = 0; break; //inside window only60case 2: set = 0, clr = 1; break; //outside window only61case 3: memset(output, 0, 256); return; //never62}6364if(one_enable == false && two_enable == false) {65memset(output, clr, 256);66return;67}6869if(one_enable == true && two_enable == false) {70if(one_invert) { set ^= 1; clr ^= 1; }71for(unsigned x = 0; x < 256; x++) {72output[x] = (x >= ppu.regs.window_one_left && x <= ppu.regs.window_one_right) ? set : clr;73}74return;75}7677if(one_enable == false && two_enable == true) {78if(two_invert) { set ^= 1; clr ^= 1; }79for(unsigned x = 0; x < 256; x++) {80output[x] = (x >= ppu.regs.window_two_left && x <= ppu.regs.window_two_right) ? set : clr;81}82return;83}8485for(unsigned x = 0; x < 256; x++) {86bool one_mask = (x >= ppu.regs.window_one_left && x <= ppu.regs.window_one_right) ^ one_invert;87bool two_mask = (x >= ppu.regs.window_two_left && x <= ppu.regs.window_two_right) ^ two_invert;88switch(mask) {89case 0: output[x] = one_mask | two_mask == 1 ? set : clr; break;90case 1: output[x] = one_mask & two_mask == 1 ? set : clr; break;91case 2: output[x] = one_mask ^ two_mask == 1 ? set : clr; break;92case 3: output[x] = one_mask ^ two_mask == 0 ? set : clr; break;93}94}95}9697#endif9899100