40 unsigned maxWidth,
unsigned height,
bool canDoInterlace);
57 std::unique_ptr<RawFrame> finishedFrame, EmuTime::param time);
66 superImposeVideoFrame = videoSource;
75 superImposeVdpFrame = vdpSource;
88 [[nodiscard]]
bool isRecording()
const {
return recorder !=
nullptr; }
106 void executeUntil(EmuTime::param time)
override;
110 [[nodiscard]]
static unsigned getLineWidth(
FrameSource* frame,
unsigned y,
unsigned step);
113 void createRegions();
115 void uploadBlock(
unsigned srcStartY,
unsigned srcEndY,
118 void preCalcNoise(
float factor);
119 void drawNoise()
const;
120 void drawGlow(
int glow);
122 void preCalcMonitor3D(
float width);
123 void drawMonitor3D()
const;
134 std::array<std::unique_ptr<RawFrame>, 4> lastFrames;
137 std::unique_ptr<DeinterlacedFrame> deinterlacedFrame;
140 std::unique_ptr<DoubledFrame> interlacedFrame;
143 std::unique_ptr<Deflicker> deflicker;
146 std::unique_ptr<SuperImposedFrame> superImposedFrame;
159 const RawFrame* superImposeVideoFrame =
nullptr;
162 int interleaveCount = 0;
163 int lastFramesCount = 0;
171 const bool canDoInterlace;
176 std::unique_ptr<GLScaler> currScaler;
183 std::array<StoredFrame, 2> renderedFrames;
188 float noiseX = 0.0f, noiseY = 0.0f;
192 [[nodiscard]]
unsigned width()
const {
return tex.
getWidth(); }
194 std::vector<TextureData> textures;
200 Region(
unsigned srcStartY_,
unsigned srcEndY_,
201 unsigned dstStartY_,
unsigned dstEndY_,
203 : srcStartY(srcStartY_)
205 , dstStartY(dstStartY_)
207 , lineWidth(lineWidth_) {}
214 std::vector<Region> regions;
216 unsigned frameCounter = 0;
228 bool storedFrame =
false;
Most basic/generic texture: only contains a texture ID.
A post processor builds the frame that is displayed from the MSX frame, while applying effects such a...
std::unique_ptr< RawFrame > rotateFrames(std::unique_ptr< RawFrame > finishedFrame, EmuTime::param time)
Sets up the "abcdFrame" variables for a new frame.
void takeRawScreenShot(unsigned height, const std::string &filename) override
Create a raw (=non-post-processed) screenshot.
void paint(OutputSurface &output) override
Paint this layer.
void setRecorder(AviRecorder *recorder_)
Start/stop recording.
void setSuperimposeVdpFrame(const FrameSource *vdpSource)
Set the VDP frame on which to superimpose the 'normal' output of this PostProcessor.
~PostProcessor() override
FrameSource * getPaintFrame() const
Get the frame that would be displayed.
void setSuperimposeVideoFrame(const RawFrame *videoSource)
Set the Video frame on which to superimpose the 'normal' output of this PostProcessor.