openMSX
|
Rasterizer using a frame buffer approach: it writes pixels to a single rectangular pixel buffer. More...
#include <SDLRasterizer.hh>
Public Member Functions | |
SDLRasterizer (const SDLRasterizer &)=delete | |
SDLRasterizer & | operator= (const SDLRasterizer &)=delete |
SDLRasterizer (VDP &vdp, Display &display, VisibleSurface &screen, std::unique_ptr< PostProcessor > postProcessor) | |
~SDLRasterizer () override | |
PostProcessor * | getPostProcessor () const override |
See VDP::getPostProcessor(). More... | |
bool | isActive () override |
Will the output of this Rasterizer be displayed? There is no point in producing a frame that will not be displayed. More... | |
void | reset () override |
Resynchronize with VDP: all cached states are flushed. More... | |
void | frameStart (EmuTime::param time) override |
Indicates the start of a new frame. More... | |
void | frameEnd () override |
Indicates the end of the current frame. More... | |
void | setDisplayMode (DisplayMode mode) override |
Precalc several values that depend on the display mode. More... | |
void | setPalette (int index, int grb) override |
Change an entry in the palette. More... | |
void | setBackgroundColor (int index) override |
Changes the background color. More... | |
void | setHorizontalAdjust (int adjust) override |
void | setHorizontalScrollLow (byte scroll) override |
void | setBorderMask (bool masked) override |
void | setTransparency (bool enabled) override |
void | setSuperimposeVideoFrame (const RawFrame *videoSource) override |
void | drawBorder (int fromX, int fromY, int limitX, int limitY) override |
Render a rectangle of border pixels on the host screen. More... | |
void | drawDisplay (int fromX, int fromY, int displayX, int displayY, int displayWidth, int displayHeight) override |
Render a rectangle of display pixels on the host screen. More... | |
void | drawSprites (int fromX, int fromY, int displayX, int displayY, int displayWidth, int displayHeight) override |
Render a rectangle of sprite pixels on the host screen. More... | |
bool | isRecording () const override |
Is video recording active? More... | |
![]() | |
virtual | ~Rasterizer ()=default |
Additional Inherited Members | |
![]() | |
Rasterizer ()=default | |
Rasterizer using a frame buffer approach: it writes pixels to a single rectangular pixel buffer.
Definition at line 28 of file SDLRasterizer.hh.
|
delete |
openmsx::SDLRasterizer< Pixel >::SDLRasterizer | ( | VDP & | vdp, |
Display & | display, | ||
VisibleSurface & | screen, | ||
std::unique_ptr< PostProcessor > | postProcessor | ||
) |
Definition at line 71 of file SDLRasterizer.cc.
References openmsx::Subject< T >::attach(), openmsx::RenderSettings::getBrightnessSetting(), openmsx::RenderSettings::getColorMatrixSetting(), openmsx::RenderSettings::getContrastSetting(), openmsx::RenderSettings::getGammaSetting(), and openmsx::VDP::isMSX1VDP().
|
override |
|
overridevirtual |
Render a rectangle of border pixels on the host screen.
The units are absolute lines (Y) and VDP clockticks (X).
fromX | X coordinate of render start (inclusive). |
fromY | Y coordinate of render start (inclusive). |
limitX | X coordinate of render end (exclusive). |
limitY | Y coordinate of render end (exclusive). |
Implements openmsx::Rasterizer.
Definition at line 444 of file SDLRasterizer.cc.
References openmsx::VDP::getDisplayMode(), openmsx::DisplayMode::getLineWidth(), gl::max(), gl::min(), openmsx::VDP::TICKS_PER_LINE, and openmsx::x.
|
overridevirtual |
Render a rectangle of display pixels on the host screen.
fromX | X coordinate of render start in VDP ticks. |
fromY | Y coordinate of render start in absolute lines. |
displayX | display coordinate of render start: [0..512). |
displayY | display coordinate of render start: [0..256). |
displayWidth | rectangle width in pixels (512 per line). |
displayHeight | rectangle height in lines. |
Implements openmsx::Rasterizer.
Definition at line 487 of file SDLRasterizer.cc.
References openmsx::VDP::getDisplayMode(), openmsx::VDP::getEvenOddMask(), openmsx::VDP::getHorizontalScrollHigh(), openmsx::VDP::getLeftBackground(), openmsx::DisplayMode::getLineWidth(), openmsx::VRAMWindow::getMask(), openmsx::DisplayMode::isBitmapMode(), openmsx::VDP::isMSX1VDP(), openmsx::VDP::isMultiPageScrolling(), openmsx::DisplayMode::isPlanar(), openmsx::DisplayMode::isTextMode(), gl::min(), openmsx::VDPVRAM::nameTable, and openmsx::x.
|
overridevirtual |
Render a rectangle of sprite pixels on the host screen.
Although the parameters are very similar to drawDisplay, the displayX and displayWidth use range [0..256) instead of [0..512) because VDP sprite coordinates work that way.
fromX | X coordinate of render start in VDP ticks. |
fromY | Y coordinate of render start in absolute lines. |
displayX | display coordinate of render start: [0..256). |
displayY | display coordinate of render start: [0..256). |
displayWidth | rectangle width in pixels (256 per line). |
displayHeight | rectangle height in lines. |
Implements openmsx::Rasterizer.
Definition at line 619 of file SDLRasterizer.cc.
References openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::VDP::getLeftSprites(), openmsx::DisplayMode::getLineWidth(), openmsx::DisplayMode::getSpriteMode(), openmsx::DisplayMode::GRAPHIC5, openmsx::DisplayMode::GRAPHIC6, openmsx::VDP::isMSX1VDP(), and gl::min().
|
overridevirtual |
Indicates the end of the current frame.
The rasterizer can perform image post processing.
Implements openmsx::Rasterizer.
Definition at line 186 of file SDLRasterizer.cc.
References openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::VDP::getHorizontalAdjust(), openmsx::VDP::getHorizontalScrollLow(), and openmsx::VDP::isBorderMasked().
|
overridevirtual |
Indicates the start of a new frame.
The rasterizer can fetch per-frame settings from the VDP.
Implements openmsx::Rasterizer.
Definition at line 153 of file SDLRasterizer.cc.
References openmsx::FrameSource::FIELD_EVEN, openmsx::FrameSource::FIELD_NONINTERLACED, openmsx::FrameSource::FIELD_ODD, openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::VDP::getEvenOdd(), openmsx::VDP::getHorizontalAdjust(), openmsx::VDP::getHorizontalScrollLow(), openmsx::VDP::isBorderMasked(), openmsx::VDP::isInterlaced(), and openmsx::VDP::isPalTiming().
|
overridevirtual |
Implements openmsx::Rasterizer.
Definition at line 110 of file SDLRasterizer.cc.
|
overridevirtual |
Will the output of this Rasterizer be displayed? There is no point in producing a frame that will not be displayed.
TODO: Is querying the next pipeline step the best way to solve this, or is it better to explicitly disable the first step in the pipeline?
Implements openmsx::Rasterizer.
Definition at line 116 of file SDLRasterizer.cc.
References openmsx::MSXDevice::getMotherBoard(), openmsx::MSXMotherBoard::isActive(), and openmsx::MSXMotherBoard::isFastForwarding().
|
overridevirtual |
Is video recording active?
Implements openmsx::Rasterizer.
Definition at line 677 of file SDLRasterizer.cc.
References openmsx::RenderSettings::getBrightnessSetting(), openmsx::RenderSettings::getColorMatrixSetting(), openmsx::RenderSettings::getContrastSetting(), and openmsx::RenderSettings::getGammaSetting().
|
delete |
|
overridevirtual |
Resynchronize with VDP: all cached states are flushed.
Implements openmsx::Rasterizer.
Definition at line 124 of file SDLRasterizer.cc.
References openmsx::VDP::getDisplayMode(), openmsx::VDP::getPalette(), openmsx::VDP::getTransparency(), openmsx::VDP::isMSX1VDP(), openmsx::SDLRasterizer< Pixel >::setDisplayMode(), and openmsx::SDLRasterizer< Pixel >::setPalette().
|
overridevirtual |
Changes the background color.
index | Palette index of the new background color. |
Implements openmsx::Rasterizer.
Definition at line 253 of file SDLRasterizer.cc.
References openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::VDP::getTransparency(), openmsx::DisplayMode::GRAPHIC7, and openmsx::VDP::isSuperimposing().
|
overridevirtual |
Implements openmsx::Rasterizer.
Definition at line 275 of file SDLRasterizer.cc.
|
overridevirtual |
Precalc several values that depend on the display mode.
mode | The new display mode. |
Implements openmsx::Rasterizer.
Definition at line 221 of file SDLRasterizer.cc.
References openmsx::VDP::getBackgroundColor(), openmsx::DisplayMode::getByte(), openmsx::VDP::getTransparency(), openmsx::DisplayMode::GRAPHIC7, openmsx::DisplayMode::isBitmapMode(), and openmsx::VDP::isSuperimposing().
Referenced by openmsx::SDLRasterizer< Pixel >::reset().
|
overridevirtual |
Implements openmsx::Rasterizer.
Definition at line 263 of file SDLRasterizer.cc.
|
overridevirtual |
Implements openmsx::Rasterizer.
Definition at line 269 of file SDLRasterizer.cc.
|
overridevirtual |
Change an entry in the palette.
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. |
Implements openmsx::Rasterizer.
Definition at line 238 of file SDLRasterizer.cc.
References openmsx::VDP::getBackgroundColor(), openmsx::VDP::getDisplayMode(), openmsx::VDP::getTransparency(), and openmsx::VDP::isSuperimposing().
Referenced by openmsx::SDLRasterizer< Pixel >::reset().
|
overridevirtual |
Implements openmsx::Rasterizer.
Definition at line 145 of file SDLRasterizer.cc.
References openmsx::VDP::getBackgroundColor(), openmsx::VDP::getDisplayMode(), and openmsx::VDP::getTransparency().
|
overridevirtual |
Implements openmsx::Rasterizer.
Definition at line 281 of file SDLRasterizer.cc.
References g, openmsx::VDP::getBackgroundColor(), openmsx::DisplayMode::getBase(), openmsx::DisplayMode::getByte(), openmsx::VDP::getDisplayMode(), openmsx::OutputSurface::getKeyColor(), openmsx::VDP::getMSX1Palette(), openmsx::DisplayMode::GRAPHIC5, openmsx::DisplayMode::GRAPHIC7, openmsx::Renderer::GRAPHIC7_SPRITE_PALETTE, openmsx::VDP::hasYJK(), openmsx::RenderSettings::isColorMatrixIdentity(), openmsx::VDP::isMSX1VDP(), openmsx::VDP::isSuperimposing(), openmsx::OutputSurface::mapKeyedRGB(), openmsx::OutputSurface::mapKeyedRGB255(), openmsx::RenderSettings::transformComponent(), and openmsx::RenderSettings::transformRGB().