Skip to content

Commit

Permalink
Add Bloom Effect Smoothing hack
Browse files Browse the repository at this point in the history
  • Loading branch information
LunaMoo committed Jan 23, 2015
1 parent cae58ca commit 722d34e
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 4 deletions.
1 change: 1 addition & 0 deletions Core/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@ static ConfigSetting graphicsSettings[] = {
ReportedConfigSetting("DisableStencilTest", &g_Config.bDisableStencilTest, false, true, true),
ReportedConfigSetting("AlwaysDepthWrite", &g_Config.bAlwaysDepthWrite, false, true, true),
ReportedConfigSetting("DepthRangeHack", &g_Config.bDepthRangeHack, false, true, true),
ReportedConfigSetting("BloomHack", &g_Config.iBloomHack, 0, true, true),

// Not really a graphics setting...
ReportedConfigSetting("TimerHack", &g_Config.bTimerHack, &DefaultTimerHack, true, true),
Expand Down
1 change: 1 addition & 0 deletions Core/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ struct Config {
bool bDisableStencilTest;
bool bAlwaysDepthWrite;
bool bDepthRangeHack;
int iBloomHack; //0 = off, 1 = safe, 2 = balanced, 3 = aggressive
bool bTimerHack;
bool bAlphaMaskHack;
bool bBlockTransferGPU;
Expand Down
40 changes: 38 additions & 2 deletions GPU/Directx9/FramebufferDX9.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -378,8 +378,44 @@ namespace DX9 {
vfb->bufferHeight = std::max(vfb->bufferHeight, h);
}

vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
if (g_Config.iInternalResolution == 1) {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
} else {
switch (g_Config.iBloomHack) {
case 0:
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
break;
case 1:
if (vfb->bufferWidth <= 128 || vfb->bufferHeight <= 64) {
vfb->renderWidth = vfb->bufferWidth;
vfb->renderHeight = vfb->bufferHeight;
} else {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
}
break;
case 2:
if (vfb->bufferWidth <= 256 || vfb->bufferHeight <= 128) {
vfb->renderWidth = vfb->bufferWidth;
vfb->renderHeight = vfb->bufferHeight;
} else {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
}
break;
case 3:
if (vfb->bufferWidth < 480 || vfb->bufferHeight < 272) {
vfb->renderWidth = vfb->bufferWidth;
vfb->renderHeight = vfb->bufferHeight;
} else {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
}
break;
}
}

bool trueColor = g_Config.bTrueColor;
if (hackForce04154000Download_ && vfb->fb_address == 0x00154000) {
Expand Down
40 changes: 38 additions & 2 deletions GPU/GLES/Framebuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -667,8 +667,44 @@ void FramebufferManager::ResizeFramebufFBO(VirtualFramebuffer *vfb, u16 w, u16 h
vfb->bufferHeight = std::max(vfb->bufferHeight, h);
}

vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
if (g_Config.iInternalResolution==1) {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
} else {
switch (g_Config.iBloomHack) {
case 0:
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
break;
case 1:
if (vfb->bufferWidth <= 128 || vfb->bufferHeight <= 64) {
vfb->renderWidth = vfb->bufferWidth;
vfb->renderHeight = vfb->bufferHeight;
} else {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
}
break;
case 2:
if (vfb->bufferWidth <= 256 || vfb->bufferHeight <= 128) {
vfb->renderWidth = vfb->bufferWidth;
vfb->renderHeight = vfb->bufferHeight;
} else {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
}
break;
case 3:
if (vfb->bufferWidth < 480 || vfb->bufferHeight < 272) {
vfb->renderWidth = vfb->bufferWidth;
vfb->renderHeight = vfb->bufferHeight;
} else {
vfb->renderWidth = vfb->bufferWidth * renderWidthFactor;
vfb->renderHeight = vfb->bufferHeight * renderHeightFactor;
}
break;
}
}

bool trueColor = g_Config.bTrueColor;
if (hackForce04154000Download_ && vfb->fb_address == 0x00154000) {
Expand Down
5 changes: 5 additions & 0 deletions UI/GameSettingsScreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,11 @@ void GameSettingsScreen::CreateViews() {
CheckBox *depthRange = graphicsSettings->Add(new CheckBox(&g_Config.bDepthRangeHack, gs->T("Depth Range Hack (Phantasy Star Portable 2)")));
depthRange->SetDisabledPtr(&g_Config.bSoftwareRendering);

static const char *bloomHackOptions[] = { "Off", "Safe", "Balanced", "Aggressive" };
PopupMultiChoice *bloomHack = graphicsSettings->Add(new PopupMultiChoice(&g_Config.iBloomHack, gs->T("Bloom Effect Smoothing"), bloomHackOptions, 0, ARRAY_SIZE(bloomHackOptions), gs, screenManager()));
bloomHackEnable_ = !g_Config.bSoftwareRendering && (g_Config.iInternalResolution != 1);
bloomHack->SetEnabledPtr(&bloomHackEnable_);

graphicsSettings->Add(new ItemHeader(gs->T("Overlay Information")));
static const char *fpsChoices[] = {
"None", "Speed", "FPS", "Both"
Expand Down
1 change: 1 addition & 0 deletions UI/GameSettingsScreen.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ class GameSettingsScreen : public UIDialogScreenWithGameBackground {
bool vtxCacheEnable_;
bool postProcEnable_;
bool resolutionEnable_;
bool bloomHackEnable_;
};

class DeveloperToolsScreen : public UIDialogScreenWithBackground {
Expand Down

0 comments on commit 722d34e

Please sign in to comment.