openMSX
|
Generic implementation of a pixel-based Renderer. More...
#include <PixelRenderer.hh>
Public Member Functions | |
PixelRenderer (VDP &vdp, Display &display) | |
~PixelRenderer () override | |
PostProcessor * | getPostProcessor () const override |
See VDP::getPostProcessor. | |
void | reInit () override |
Reinitialize Renderer state. | |
void | frameStart (EmuTime::param time) override |
Signals the start of a new frame. | |
void | frameEnd (EmuTime::param time) override |
Signals the end of a frame. | |
void | updateHorizontalScrollLow (byte scroll, EmuTime::param time) override |
Informs the renderer of a horizontal scroll change: the lower scroll value has changed. | |
void | updateHorizontalScrollHigh (byte scroll, EmuTime::param time) override |
Informs the renderer of a horizontal scroll change: the higher scroll value has changed. | |
void | updateBorderMask (bool masked, EmuTime::param time) override |
Informs the renderer of a horizontal scroll change: the border mask has been enabled/disabled. | |
void | updateMultiPage (bool multiPage, EmuTime::param time) override |
Informs the renderer of a horizontal scroll change: the multi page setting has changed. | |
void | updateTransparency (bool enabled, EmuTime::param time) override |
Informs the renderer of a VDP transparency enable/disable change. | |
void | updateSuperimposing (const RawFrame *videoSource, EmuTime::param time) override |
Informs the renderer of a VDP superimposing change. | |
void | updateForegroundColor (byte color, EmuTime::param time) override |
Informs the renderer of a VDP foreground color change. | |
void | updateBackgroundColor (byte color, EmuTime::param time) override |
Informs the renderer of a VDP background color change. | |
void | updateBlinkForegroundColor (byte color, EmuTime::param time) override |
Informs the renderer of a VDP blink foreground color change. | |
void | updateBlinkBackgroundColor (byte color, EmuTime::param time) override |
Informs the renderer of a VDP blink background color change. | |
void | updateBlinkState (bool enabled, EmuTime::param time) override |
Informs the renderer of a VDP blinking state change. | |
void | updatePalette (unsigned index, int grb, EmuTime::param time) override |
Informs the renderer of a VDP palette change. | |
void | updateVerticalScroll (int scroll, EmuTime::param time) override |
Informs the renderer of a vertical scroll change. | |
void | updateHorizontalAdjust (int adjust, EmuTime::param time) override |
Informs the renderer of a horizontal adjust change. | |
void | updateDisplayEnabled (bool enabled, EmuTime::param time) override |
Informs the renderer of a VDP display enabled change. | |
void | updateDisplayMode (DisplayMode mode, EmuTime::param time) override |
Informs the renderer of a VDP display mode change. | |
void | updateNameBase (unsigned addr, EmuTime::param time) override |
Informs the renderer of a name table base address change. | |
void | updatePatternBase (unsigned addr, EmuTime::param time) override |
Informs the renderer of a pattern table base address change. | |
void | updateColorBase (unsigned addr, EmuTime::param time) override |
Informs the renderer of a color table base address change. | |
void | updateSpritesEnabled (bool enabled, EmuTime::param time) override |
Informs the renderer of a VDP sprites enabled change. | |
void | updateVRAM (unsigned offset, EmuTime::param time) override |
Informs the observer of a change in VRAM contents. | |
void | updateWindow (bool enabled, EmuTime::param time) override |
Informs the observer that the entire VRAM window will change. | |
Public Member Functions inherited from openmsx::Renderer | |
virtual | ~Renderer ()=default |
Additional Inherited Members | |
Static Public Attributes inherited from openmsx::Renderer | |
static constexpr std::array< uint16_t, 16 > | GRAPHIC7_SPRITE_PALETTE |
Sprite palette in Graphic 7 mode. | |
Protected Member Functions inherited from openmsx::Renderer | |
Renderer ()=default | |
Protected Member Functions inherited from openmsx::VRAMObserver | |
~VRAMObserver ()=default | |
Generic implementation of a pixel-based Renderer.
Uses a Rasterizer to plot actual pixels for a specific video system.
Definition at line 29 of file PixelRenderer.hh.
Definition at line 113 of file PixelRenderer.cc.
References openmsx::Subject< T >::attach(), openmsx::RenderSettings::getMaxFrameSkipSetting(), openmsx::RenderSettings::getMinFrameSkipSetting(), and reInit().
|
override |
Definition at line 136 of file PixelRenderer.cc.
References openmsx::Subject< T >::detach(), openmsx::RenderSettings::getMaxFrameSkipSetting(), and openmsx::RenderSettings::getMinFrameSkipSetting().
|
overridevirtual |
Signals the end of a frame.
time | The moment in emulated time the frame ends. Note: this is the same time stamp as the start of the next frame. |
Implements openmsx::Renderer.
Definition at line 219 of file PixelRenderer.cc.
References openmsx::EventDistributor::distributeEvent(), openmsx::RenderSettings::getDeinterlace(), openmsx::MSXDevice::getMotherBoard(), openmsx::VideoSourceSetting::getSource(), openmsx::Timer::getTime(), openmsx::MSXMotherBoard::isActive(), openmsx::VDP::isEvenOddEnabled(), openmsx::MSXMotherBoard::isFastForwarding(), and openmsx::VDP::isInterlaced().
|
overridevirtual |
Signals the start of a new frame.
The Renderer can use this to get fixed-per-frame settings from the VDP, such as PAL/NTSC timing.
time | The moment in emulated time the frame starts. |
Implements openmsx::Renderer.
Definition at line 165 of file PixelRenderer.cc.
References openmsx::RenderSettings::getAccuracy(), openmsx::RenderSettings::getDeinterlace(), openmsx::VDP::getEvenOdd(), openmsx::RenderSettings::getMaxFrameSkip(), openmsx::RenderSettings::getMinFrameSkip(), openmsx::SpeedManager::getSpeed(), openmsx::Timer::getTime(), openmsx::VDP::isEvenOddEnabled(), openmsx::VDP::isInterlaced(), openmsx::ThrottleManager::isThrottled(), and openmsx::RealTime::timeLeft().
|
overridevirtual |
Implements openmsx::Renderer.
Definition at line 142 of file PixelRenderer.cc.
|
overridevirtual |
Reinitialize Renderer state.
Implements openmsx::Renderer.
Definition at line 147 of file PixelRenderer.cc.
References openmsx::VDP::isDisplayEnabled().
Referenced by PixelRenderer().
|
overridevirtual |
Informs the renderer of a VDP background color change.
color | The new background color. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 299 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP blink background color change.
color | The new blink background color. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 312 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP blink foreground color change.
color | The new blink foreground color. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 306 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP blinking state change.
enabled | The new blink state. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 318 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a horizontal scroll change: the border mask has been enabled/disabled.
masked | true iff enabled. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 266 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a color table base address change.
addr | The new base address. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 390 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP display enabled change.
Both the regular border start/end and forced blanking by clearing the display enable bit are considered display enabled changes.
enabled | The new display enabled state. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 159 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP display mode change.
mode | The new display mode. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 363 of file PixelRenderer.cc.
References openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::DisplayMode::GRAPHIC5, and openmsx::DisplayMode::GRAPHIC7.
|
overridevirtual |
Informs the renderer of a VDP foreground color change.
color | The new foreground color. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 293 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a horizontal adjust change.
Note that there is no similar method for vertical adjust updates, because vertical adjust is calculated at start of frame and then fixed.
adjust | The new adjust value. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 356 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a horizontal scroll change: the higher scroll value has changed.
scroll | The new scroll value. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 260 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a horizontal scroll change: the lower scroll value has changed.
scroll | The new scroll value. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 253 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a horizontal scroll change: the multi page setting has changed.
multiPage | The new multi page flag. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 273 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a name table base address change.
addr | The new base address. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 378 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP palette change.
index | The index [0..15] in the palette that changes. |
grb | The new definition for the changed palette index: bit 10..8 is green, bit 6..4 is red and bit 2..0 is blue; all other bits are zero. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 328 of file PixelRenderer.cc.
References openmsx::VDP::getBackgroundColor(), openmsx::DisplayMode::getBase(), openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::DisplayMode::GRAPHIC5, and openmsx::DisplayMode::GRAPHIC7.
|
overridevirtual |
Informs the renderer of a pattern table base address change.
addr | The new base address. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 384 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP sprites enabled change.
enabled | The new sprites enabled state. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 396 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP superimposing change.
videoSource | Video that should be superimposed, nullptr if none. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 286 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a VDP transparency enable/disable change.
enabled | The new transparency state. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 279 of file PixelRenderer.cc.
|
overridevirtual |
Informs the renderer of a vertical scroll change.
scroll | The new scroll value. |
time | The moment in emulated time this change occurs. |
Implements openmsx::Renderer.
Definition at line 350 of file PixelRenderer.cc.
|
overridevirtual |
Informs the observer of a change in VRAM contents.
This update is sent just before the change, so the subcomponent can update itself to the given time based on the old contents.
offset | Offset of byte that will change, relative to window base address. |
time | The moment in emulated time this change occurs. |
Implements openmsx::VRAMObserver.
Definition at line 510 of file PixelRenderer.cc.
|
overridevirtual |
Informs the observer that the entire VRAM window will change.
This update is sent just before the change, so the subcomponent can update itself to the given time based on the old contents. This happens if the base/index masks are changed, or if the window becomes disabled. TODO: Separate enable/disable from window move?
enabled | Will the window be enabled after the change? If the observer keeps a cache which is based on VRAM contents, it is only necessary to flush the cache if the new window is enabled, because no reads are allowed from disabled windows. |
time | The moment in emulated time this change occurs. |
Implements openmsx::VRAMObserver.
Definition at line 519 of file PixelRenderer.cc.