DPI: Remove g_display.dpi

This commit is contained in:
Henrik Rydgård 2025-02-20 14:27:22 -06:00
parent 23f43dd9fa
commit 0acd2aa517
7 changed files with 46 additions and 34 deletions

View file

@ -58,7 +58,7 @@ void DisplayProperties::Print() {
printf("dp_xres/yres: %d, %d\n", dp_xres, dp_yres);
printf("pixel_xres/yres: %d, %d\n", pixel_xres, pixel_yres);
printf("dpi, dpi_scale: %f, %f\n", dpi, dpi_scale);
printf("dpi_scale: %f\n", dpi_scale);
printf("pixel_in_dps: %f\n", pixel_in_dps);
printf("dpi_real: %f\n", dpi_scale_real);

View file

@ -16,20 +16,20 @@ enum class DisplayRotation {
};
struct DisplayProperties {
// Display resolution in virtual ("display") pixels
int dp_xres;
int dp_yres;
// Display resolution in true pixels.
int pixel_xres;
int pixel_yres;
float dpi = 1.0f;
float dpi_scale = 1.0f;
// pixel_xres/yres in dps
// Display resolution in virtual ("display") pixels
int dp_xres;
int dp_yres;
// Size of a physical pixel in dps
float pixel_in_dps = 1.0f;
// If DPI is overridden (like in small window mode), these are still the original DPI.
// If DPI is overridden (like in small window mode), this is still the original DPI scale factor.
float dpi_scale_real = 1.0f;
float display_hz = 60.0f;

View file

@ -646,11 +646,11 @@ void SystemInfoScreen::CreateTabs() {
System_GetPropertyInt(SYSPROP_DISPLAY_XRES),
System_GetPropertyInt(SYSPROP_DISPLAY_YRES))));
#endif
displayInfo->Add(new InfoItem(si->T("UI resolution"), StringFromFormat("%dx%d (%s: %0.2f)",
displayInfo->Add(new InfoItem(si->T("UI resolution"), StringFromFormat("%dx%d (%s: %d)",
g_display.dp_xres,
g_display.dp_yres,
si->T_cstr("DPI"),
g_display.dpi)));
System_GetPropertyInt(SYSPROP_DISPLAY_DPI))));
displayInfo->Add(new InfoItem(si->T("Pixel resolution"), StringFromFormat("%dx%d",
g_display.pixel_xres,
g_display.pixel_yres)));
@ -1311,22 +1311,25 @@ void TouchTestScreen::DrawForeground(UIContext &dc) {
truncate_cpy(extra_debug, Android_GetInputDeviceDebugString().c_str());
#endif
// Hm, why don't we print all the info on Android?
#if PPSSPP_PLATFORM(ANDROID)
snprintf(buffer, sizeof(buffer),
"display_res: %dx%d\n",
(int)System_GetPropertyInt(SYSPROP_DISPLAY_XRES), (int)System_GetPropertyInt(SYSPROP_DISPLAY_YRES));
#else
snprintf(buffer, sizeof(buffer),
#if PPSSPP_PLATFORM(ANDROID)
"display_res: %dx%d\n"
#endif
"dp_res: %dx%d pixel_res: %dx%d\n"
"g_dpi: %0.3f g_dpi_scale: %0.3f\n"
"g_dpi_scale_real: %0.3f\n"
"dpi_scale: %0.3f\n"
"dpi_scale_real: %0.3f\n"
"delta: %0.2f ms fps: %0.3f\n%s",
#if PPSSPP_PLATFORM(ANDROID)
(int)System_GetPropertyInt(SYSPROP_DISPLAY_XRES), (int)System_GetPropertyInt(SYSPROP_DISPLAY_YRES),
#endif
g_display.dp_xres, g_display.dp_yres, g_display.pixel_xres, g_display.pixel_yres,
g_display.dpi, g_display.dpi_scale,
g_display.dpi_scale,
g_display.dpi_scale_real,
delta * 1000.0, 1.0 / delta,
extra_debug);
#endif
// On Android, also add joystick debug data.
dc.DrawTextShadow(buffer, bounds.centerX(), bounds.y + 20.0f, 0xFFFFFFFF, FLAG_DYNAMIC_ASCII);

View file

@ -1520,31 +1520,37 @@ static bool IsWindowSmall(int pixelWidth, int pixelHeight) {
bool Native_UpdateScreenScale(int pixel_width, int pixel_height) {
bool smallWindow;
float g_logical_dpi = System_GetPropertyFloat(SYSPROP_DISPLAY_LOGICAL_DPI);
g_display.dpi = System_GetPropertyFloat(SYSPROP_DISPLAY_DPI);
const bool px_changed = g_display.pixel_xres != pixel_width || g_display.pixel_yres != pixel_height;
if (g_display.dpi < 0.0f) {
g_display.dpi = 96.0f;
float g_logical_dpi = System_GetPropertyFloat(SYSPROP_DISPLAY_LOGICAL_DPI);
float dpi = System_GetPropertyFloat(SYSPROP_DISPLAY_DPI);
if (dpi < 0.0f) {
dpi = 96.0f;
}
if (g_logical_dpi < 0.0f) {
g_logical_dpi = 96.0f;
}
g_display.dpi_scale_real = g_logical_dpi / g_display.dpi;
g_display.dpi_scale_real = g_logical_dpi / dpi;
g_display.dpi_scale = g_display.dpi_scale_real;
float scaleFactor = 1.0f;
smallWindow = IsWindowSmall(pixel_width, pixel_height);
if (smallWindow) {
g_display.dpi /= 2.0f;
g_display.dpi_scale *= 2.0f;
scaleFactor = 0.5f;
}
// No need to change ".dpi" here.
g_display.dpi_scale /= scaleFactor;
g_display.pixel_in_dps = 1.0f / g_display.dpi_scale;
int new_dp_xres = (int)(pixel_width * g_display.dpi_scale);
int new_dp_yres = (int)(pixel_height * g_display.dpi_scale);
bool dp_changed = new_dp_xres != g_display.dp_xres || new_dp_yres != g_display.dp_yres;
bool px_changed = g_display.pixel_xres != pixel_width || g_display.pixel_yres != pixel_height;
const bool dp_changed = new_dp_xres != g_display.dp_xres || new_dp_yres != g_display.dp_yres;
if (!dp_changed && !px_changed) {
return false;

View file

@ -147,13 +147,13 @@ void PPSSPP_UWPMain::UpdateScreenState() {
std::swap(g_display.pixel_xres, g_display.pixel_yres);
}
g_display.dpi = m_deviceResources->GetActualDpi();
float dpi = m_deviceResources->GetActualDpi();
if (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) == DEVICE_TYPE_MOBILE) {
// Boost DPI a bit to look better.
g_display.dpi *= 96.0f / 136.0f;
dpi *= 96.0f / 136.0f;
}
g_display.dpi_scale_real = 96.0f / g_display.dpi;
g_display.dpi_scale_real = 96.0f / dpi;
g_display.dpi_scale = g_display.dpi_scale_real;
g_display.pixel_in_dps = 1.0f / g_display.dpi_scale;

View file

@ -412,6 +412,8 @@ int64_t System_GetPropertyInt(SystemProperty prop) {
return display_xres;
case SYSPROP_DISPLAY_YRES:
return display_yres;
case SYSPROP_DISPLAY_DPI:
return display_dpi;
case SYSPROP_AUDIO_SAMPLE_RATE:
return sampleRate;
case SYSPROP_AUDIO_FRAMES_PER_BUFFER:
@ -999,8 +1001,8 @@ extern "C" jboolean Java_org_ppsspp_ppsspp_NativeRenderer_displayInit(JNIEnv * e
}
static void recalculateDpi() {
g_display.dpi = (float)display_dpi;
g_display.dpi_scale_real = 240.0f / (float)display_dpi;
g_display.dpi_scale = g_display.dpi_scale_real;
g_display.dp_xres = display_xres * g_display.dpi_scale;
@ -1009,7 +1011,7 @@ static void recalculateDpi() {
g_display.pixel_in_dps = (float)g_display.pixel_xres / g_display.dp_xres;
INFO_LOG(Log::G3D, "RecalcDPI: display_xres=%d display_yres=%d pixel_xres=%d pixel_yres=%d", display_xres, display_yres, g_display.pixel_xres, g_display.pixel_yres);
INFO_LOG(Log::G3D, "RecalcDPI: g_dpi=%f g_dpi_scale=%f dp_xres=%d dp_yres=%d", g_display.dpi, g_display.dpi_scale, g_display.dp_xres, g_display.dp_yres);
INFO_LOG(Log::G3D, "RecalcDPI: g_dpi=%d g_dpi_scale=%f dp_xres=%d dp_yres=%d", display_dpi, g_display.dpi_scale, g_display.dp_xres, g_display.dp_yres);
}
extern "C" void JNICALL Java_org_ppsspp_ppsspp_NativeApp_backbufferResize(JNIEnv *, jclass, jint bufw, jint bufh, jint format) {

View file

@ -142,13 +142,14 @@
std::swap(size.height, size.width);
}
float dpi;
if (screen == [UIScreen mainScreen]) {
g_display.dpi = (IS_IPAD() ? 200.0f : 150.0f) * scale;
dpi = (IS_IPAD() ? 200.0f : 150.0f) * scale;
} else {
float diagonal = sqrt(size.height * size.height + size.width * size.width);
g_display.dpi = diagonal * scale * 0.1f;
dpi = diagonal * scale * 0.1f;
}
g_display.dpi_scale_real = 240.0f / g_display.dpi;
g_display.dpi_scale_real = 240.0f / dpi;
g_display.dpi_scale = g_display.dpi_scale_real;
@ -161,7 +162,7 @@
g_display.pixel_in_dps = (float)g_display.pixel_xres / (float)g_display.dp_xres;
[[sharedViewController getView] setContentScaleFactor:scale];
// PSP native resize
PSP_CoreParameter().pixelWidth = g_display.pixel_xres;
PSP_CoreParameter().pixelHeight = g_display.pixel_yres;