mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Fix resizing issue. Took some refactoring.
This commit is contained in:
parent
63cbd9c79b
commit
37ec31dedd
13 changed files with 40 additions and 37 deletions
|
@ -160,14 +160,7 @@ void GPU_D3D11::InitClear() {
|
|||
void GPU_D3D11::BeginHostFrame() {
|
||||
GPUCommon::BeginHostFrame();
|
||||
UpdateCmdInfo();
|
||||
if (resized_) {
|
||||
gstate_c.useFlags = CheckGPUFeatures();
|
||||
framebufferManager_->Resized();
|
||||
drawEngine_.NotifyConfigChanged();
|
||||
textureCache_->NotifyConfigChanged();
|
||||
shaderManagerD3D11_->DirtyLastShader();
|
||||
resized_ = false;
|
||||
}
|
||||
CheckResized();
|
||||
}
|
||||
|
||||
void GPU_D3D11::ReapplyGfxState() {
|
||||
|
|
|
@ -66,7 +66,7 @@ private:
|
|||
}
|
||||
// void ApplyDrawState(int prim);
|
||||
void CheckFlushOp(int cmd, u32 diff);
|
||||
void BuildReportingInfo();
|
||||
void BuildReportingInfo() override;
|
||||
|
||||
void InitClear() override;
|
||||
void BeginFrame() override;
|
||||
|
|
|
@ -150,14 +150,7 @@ void GPU_DX9::InitClear() {
|
|||
void GPU_DX9::BeginHostFrame() {
|
||||
GPUCommon::BeginHostFrame();
|
||||
UpdateCmdInfo();
|
||||
if (resized_) {
|
||||
gstate_c.useFlags = CheckGPUFeatures();
|
||||
framebufferManager_->Resized();
|
||||
drawEngine_.NotifyConfigChanged();
|
||||
textureCache_->NotifyConfigChanged();
|
||||
shaderManagerDX9_->DirtyShader();
|
||||
resized_ = false;
|
||||
}
|
||||
CheckResized();
|
||||
}
|
||||
|
||||
void GPU_DX9::ReapplyGfxState() {
|
||||
|
|
|
@ -63,7 +63,7 @@ private:
|
|||
drawEngine_.Flush();
|
||||
}
|
||||
void CheckFlushOp(int cmd, u32 diff);
|
||||
void BuildReportingInfo();
|
||||
void BuildReportingInfo() override;
|
||||
|
||||
void InitClear() override;
|
||||
void BeginFrame() override;
|
||||
|
|
|
@ -268,14 +268,7 @@ void GPU_GLES::InitClear() {
|
|||
void GPU_GLES::BeginHostFrame() {
|
||||
GPUCommon::BeginHostFrame();
|
||||
UpdateCmdInfo();
|
||||
if (resized_) {
|
||||
gstate_c.useFlags = CheckGPUFeatures();
|
||||
framebufferManager_->Resized();
|
||||
drawEngine_.NotifyConfigChanged();
|
||||
textureCache_->NotifyConfigChanged();
|
||||
shaderManagerGL_->DirtyShader();
|
||||
resized_ = false;
|
||||
}
|
||||
CheckResized();
|
||||
|
||||
drawEngine_.BeginFrame();
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ private:
|
|||
drawEngine_.Flush();
|
||||
}
|
||||
void CheckFlushOp(int cmd, u32 diff);
|
||||
void BuildReportingInfo();
|
||||
void BuildReportingInfo() override;
|
||||
|
||||
void InitClear() override;
|
||||
void BeginFrame() override;
|
||||
|
|
|
@ -611,6 +611,20 @@ void GPUCommon::Resized() {
|
|||
resized_ = true;
|
||||
}
|
||||
|
||||
// Called once per frame. Might also get called during the pause screen
|
||||
// if "transparent".
|
||||
void GPUCommon::CheckResized() {
|
||||
if (resized_) {
|
||||
gstate_c.useFlags = CheckGPUFeatures();
|
||||
BuildReportingInfo();
|
||||
framebufferManager_->Resized();
|
||||
drawEngineCommon_->NotifyConfigChanged();
|
||||
textureCache_->NotifyConfigChanged();
|
||||
shaderManager_->DirtyLastShader();
|
||||
resized_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
void GPUCommon::DumpNextFrame() {
|
||||
dumpNextFrame_ = true;
|
||||
}
|
||||
|
|
|
@ -77,6 +77,7 @@ public:
|
|||
return draw_;
|
||||
}
|
||||
virtual u32 CheckGPUFeatures() const;
|
||||
void CheckResized() override;
|
||||
|
||||
void UpdateCmdInfo();
|
||||
|
||||
|
@ -309,6 +310,8 @@ protected:
|
|||
|
||||
size_t FormatGPUStatsCommon(char *buf, size_t size);
|
||||
|
||||
virtual void BuildReportingInfo() = 0;
|
||||
|
||||
FramebufferManagerCommon *framebufferManager_ = nullptr;
|
||||
TextureCacheCommon *textureCache_ = nullptr;
|
||||
DrawEngineCommon *drawEngineCommon_ = nullptr;
|
||||
|
|
|
@ -197,6 +197,7 @@ public:
|
|||
// Frame managment
|
||||
virtual void BeginHostFrame() = 0;
|
||||
virtual void EndHostFrame() = 0;
|
||||
virtual void CheckResized() = 0;
|
||||
|
||||
// Draw queue management
|
||||
virtual DisplayList* getList(int listid) = 0;
|
||||
|
|
|
@ -205,6 +205,8 @@ protected:
|
|||
void CopyToCurrentFboFromDisplayRam(int srcwidth, int srcheight);
|
||||
void ConvertTextureDescFrom16(Draw::TextureDesc &desc, int srcwidth, int srcheight, const uint16_t *overrideData = nullptr);
|
||||
|
||||
void BuildReportingInfo() override {}
|
||||
|
||||
private:
|
||||
void MarkDirty(uint32_t addr, uint32_t stride, uint32_t height, GEBufferFormat fmt, SoftGPUVRAMDirty value);
|
||||
void MarkDirty(uint32_t addr, uint32_t bytes, SoftGPUVRAMDirty value);
|
||||
|
|
|
@ -275,15 +275,7 @@ void GPU_Vulkan::BeginHostFrame() {
|
|||
drawEngine_.BeginFrame();
|
||||
UpdateCmdInfo();
|
||||
|
||||
if (resized_) {
|
||||
gstate_c.useFlags = CheckGPUFeatures();
|
||||
// In case the GPU changed.
|
||||
BuildReportingInfo();
|
||||
framebufferManager_->Resized();
|
||||
drawEngine_.NotifyConfigChanged();
|
||||
textureCache_->NotifyConfigChanged();
|
||||
resized_ = false;
|
||||
}
|
||||
CheckResized();
|
||||
|
||||
textureCacheVulkan_->StartFrame();
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ private:
|
|||
drawEngine_.Flush();
|
||||
}
|
||||
void CheckFlushOp(int cmd, u32 diff);
|
||||
void BuildReportingInfo();
|
||||
void BuildReportingInfo() override;
|
||||
void InitClear() override;
|
||||
void CopyDisplayToOutput(bool reallyDirty) override;
|
||||
void Reinitialize() override;
|
||||
|
|
|
@ -1398,8 +1398,20 @@ void EmuScreen::render() {
|
|||
// If we're paused and PauseScreen is transparent (will only be in buffered rendering mode), we just copy display to output.
|
||||
thin3d->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::DONT_CARE, RPAction::DONT_CARE }, "EmuScreen_Paused");
|
||||
if (PSP_IsInited()) {
|
||||
gpu->CheckResized();
|
||||
gpu->CopyDisplayToOutput(true);
|
||||
}
|
||||
|
||||
screenManager()->getUIContext()->BeginFrame();
|
||||
DrawContext *draw = screenManager()->getDrawContext();
|
||||
Viewport viewport;
|
||||
viewport.TopLeftX = 0;
|
||||
viewport.TopLeftY = 0;
|
||||
viewport.Width = pixel_xres;
|
||||
viewport.Height = pixel_yres;
|
||||
viewport.MaxDepth = 1.0;
|
||||
viewport.MinDepth = 0.0;
|
||||
draw->SetViewports(1, &viewport);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue