Mesen2/Core/NES/DefaultNesPpu.h
2022-09-08 21:29:52 -04:00

35 lines
1.2 KiB
C++

#pragma once
#include "pch.h"
#include "NES/NesPpu.h"
class DefaultNesPpu final : public NesPpu<DefaultNesPpu>
{
public:
DefaultNesPpu(NesConsole* console) : NesPpu(console)
{
}
__forceinline void StoreSpriteInformation(bool verticalMirror, uint16_t tileAddr, uint8_t lineOffset) { }
__forceinline void StoreTileInformation() {}
__forceinline bool RemoveSpriteLimit() { return _console->GetNesConfig().RemoveSpriteLimit; }
__forceinline bool UseAdaptiveSpriteLimit() { return _console->GetNesConfig().AdaptiveSpriteLimit; }
void* OnBeforeSendFrame() { return nullptr; }
__forceinline void ProcessScanline()
{
ProcessScanlineImpl();
}
__forceinline void DrawPixel()
{
//This is called 3.7 million times per second - needs to be as fast as possible.
if(IsRenderingEnabled() || ((_videoRamAddr & 0x3F00) != 0x3F00)) {
uint32_t color = GetPixelColor();
_currentOutputBuffer[(_scanline << 8) + _cycle - 1] = _paletteRam[color & 0x03 ? color : 0];
} else {
//"If the current VRAM address points in the range $3F00-$3FFF during forced blanking, the color indicated by this palette location will be shown on screen instead of the backdrop color."
_currentOutputBuffer[(_scanline << 8) + _cycle - 1] = _paletteRam[_videoRamAddr & 0x1F];
}
}
};