diff --git a/desmume/src/frontend/windows/agg/include/agg_embedded_raster_fonts.h b/desmume/src/frontend/windows/agg/include/agg_embedded_raster_fonts.h index 795a90d00..547f8288d 100644 --- a/desmume/src/frontend/windows/agg/include/agg_embedded_raster_fonts.h +++ b/desmume/src/frontend/windows/agg/include/agg_embedded_raster_fonts.h @@ -33,8 +33,8 @@ namespace agg extern const int8u gse4x8[]; extern const int8u gse5x7[]; extern const int8u gse5x9[]; - extern const int8u gse6x12[]; extern const int8u gse6x9[]; + extern const int8u gse6x12[]; extern const int8u gse7x11[]; extern const int8u gse7x11_bold[]; extern const int8u gse7x15[]; diff --git a/desmume/src/frontend/windows/main.cpp b/desmume/src/frontend/windows/main.cpp index fc76d0c3d..ec30710d0 100755 --- a/desmume/src/frontend/windows/main.cpp +++ b/desmume/src/frontend/windows/main.cpp @@ -1170,7 +1170,7 @@ RECT CalculateDisplayLayoutWrapper(RECT rcClient, int targetWidth, int targetHei return rc; } -void UpdateWndRects(HWND hwnd) +void UpdateWndRects(HWND hwnd, RECT* newClientRect = NULL) { POINT ptClient; RECT rc; @@ -1185,7 +1185,11 @@ void UpdateWndRects(HWND hwnd) int oneScreenHeight, gapHeight; int tbheight; - GetClientRect(hwnd, &rc); + //if we're in the middle of resizing the window, GetClientRect will return the old rect + if (newClientRect) + rc = RECT(*newClientRect); + else + GetClientRect(hwnd, &rc); if(maximized) rc = FullScreenRect; @@ -1682,26 +1686,81 @@ struct GLDISPLAY } gldisplay; +static void OGL_DrawTexture(RECT* srcRects, RECT* dstRects) +{ + //don't change the original rects + RECT sRects[2]; + sRects[0] = RECT(srcRects[0]); + sRects[1] = RECT(srcRects[1]); + + //use clear+scissor for gap + if (video.screengap > 0) + { + //adjust client rect into scissor rect (0,0 at bottomleft) + glScissor(dstRects[2].left, dstRects[2].bottom, dstRects[2].right - dstRects[2].left, dstRects[2].top - dstRects[2].bottom); + + u32 color_rev = (u32)ScreenGapColor; + int r = (color_rev >> 0) & 0xFF; + int g = (color_rev >> 8) & 0xFF; + int b = (color_rev >> 16) & 0xFF; + glClearColor(r / 255.0f, g / 255.0f, b / 255.0f, 1.0f); + glEnable(GL_SCISSOR_TEST); + glClear(GL_COLOR_BUFFER_BIT); + glDisable(GL_SCISSOR_TEST); + } + + //draw two screens + glBegin(GL_QUADS); + for (int i = 0; i<2; i++) + { + //none of this makes any goddamn sense. dont even try. + int idx = i; + int ofs = 0; + switch (video.rotation) + { + case 0: + break; + case 90: + ofs = 3; + idx = 1 - i; + std::swap(sRects[idx].right, sRects[idx].bottom); + std::swap(sRects[idx].left, sRects[idx].top); + break; + case 180: + idx = 1 - i; + ofs = 2; + break; + case 270: + std::swap(sRects[idx].right, sRects[idx].bottom); + std::swap(sRects[idx].left, sRects[idx].top); + ofs = 1; + break; + } + float u1 = sRects[idx].left / (float)video.width; + float u2 = sRects[idx].right / (float)video.width; + float v1 = sRects[idx].top / (float)video.height; + float v2 = sRects[idx].bottom / (float)video.height; + float u[] = { u1,u2,u2,u1 }; + float v[] = { v1,v1,v2,v2 }; + + glTexCoord2f(u[(ofs + 0) % 4], v[(ofs + 0) % 4]); + glVertex2i(dstRects[i].left, dstRects[i].top); + + glTexCoord2f(u[(ofs + 1) % 4], v[(ofs + 1) % 4]); + glVertex2i(dstRects[i].right, dstRects[i].top); + + glTexCoord2f(u[(ofs + 2) % 4], v[(ofs + 2) % 4]); + glVertex2i(dstRects[i].right, dstRects[i].bottom); + + glTexCoord2f(u[(ofs + 3) % 4], v[(ofs + 3) % 4]); + glVertex2i(dstRects[i].left, dstRects[i].bottom); + } + glEnd(); +} static void OGL_DoDisplay() { if(!gldisplay.begin()) return; - const NDSDisplayInfo &displayInfo = GPU->GetDisplayInfo(); - - static GLuint tex = 0; - if(tex == 0) - glGenTextures(1,&tex); - - glBindTexture(GL_TEXTURE_2D,tex); - - if(gpu_bpp == 15) - { - //yeah, it's 32bits here still. we've converted it previously, for compositing the HUD - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, video.width, video.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, video.finalBuffer()); - } - else - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, video.width, video.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, video.finalBuffer()); - //the ds screen fills the texture entirely, so we dont have garbage at edge to worry about, //but we need to make sure this is clamped for when filtering is selected glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); @@ -1718,16 +1777,12 @@ static void OGL_DoDisplay() glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); } - glEnable(GL_TEXTURE_2D); - RECT rc; HWND hwnd = MainWindow->getHWnd(); GetClientRect(hwnd,&rc); int width = rc.right - rc.left; int height = rc.bottom - rc.top; - glDisable(GL_LIGHTING); - glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); @@ -1737,41 +1792,22 @@ static void OGL_DoDisplay() glMatrixMode(GL_MODELVIEW); glLoadIdentity(); + //clear entire area, for cases where the screen is maximized + glClearColor(0,0,0,0); + glClear(GL_COLOR_BUFFER_BIT); + + // get dest and src rects RECT dr[] = {MainScreenRect, SubScreenRect, GapRect}; for(int i=0;i<2;i++) //dont change gap rect, for some reason { ScreenToClient(hwnd,(LPPOINT)&dr[i].left); ScreenToClient(hwnd,(LPPOINT)&dr[i].right); } - - //clear entire area, for cases where the screen is maximized - glClearColor(0,0,0,0); - glClear(GL_COLOR_BUFFER_BIT); - - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - - //use clear+scissor for gap - if(video.screengap > 0) - { - //adjust client rect into scissor rect (0,0 at bottomleft) - dr[2].bottom = height - dr[2].bottom; - dr[2].top = height - dr[2].top; - glScissor(dr[2].left,dr[2].bottom,dr[2].right-dr[2].left,dr[2].top-dr[2].bottom); - - u32 color_rev = (u32)ScreenGapColor; - int r = (color_rev>>0)&0xFF; - int g = (color_rev>>8)&0xFF; - int b = (color_rev>>16)&0xFF; - glClearColor(r/255.0f,g/255.0f,b/255.0f,1.0f); - glEnable(GL_SCISSOR_TEST); - glClear(GL_COLOR_BUFFER_BIT); - glDisable(GL_SCISSOR_TEST); - } - + dr[2].bottom = height - dr[2].bottom; + dr[2].top = height - dr[2].top; RECT srcRects [2]; - const bool isMainGPUFirst = (displayInfo.engineID[NDSDisplayID_Main] == GPUEngineID_Main); + const bool isMainGPUFirst = (GPU->GetDisplayInfo().engineID[NDSDisplayID_Main] == GPUEngineID_Main); if(video.swap == 0) { @@ -1803,62 +1839,17 @@ static void OGL_DoDisplay() // srcRects[1].left,srcRects[1].top, srcRects[1].right-srcRects[1].left, srcRects[1].bottom-srcRects[1].top // ); + glEnable(GL_TEXTURE_2D); + // draw DS display + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, video.width, video.height, 0, GL_BGRA, GL_UNSIGNED_BYTE, video.finalBuffer()); + OGL_DrawTexture(srcRects, dr); - //draw two screens - glBegin(GL_QUADS); - - for(int i=0;i<2;i++) - { - //none of this makes any goddamn sense. dont even try. - int idx = i; - int ofs = 0; - switch(video.rotation) - { - case 0: - break; - case 90: - ofs = 3; - idx = 1-i; - std::swap(srcRects[idx].right,srcRects[idx].bottom); - std::swap(srcRects[idx].left,srcRects[idx].top); - break; - case 180: - idx = 1-i; - ofs = 2; - break; - case 270: - std::swap(srcRects[idx].right,srcRects[idx].bottom); - std::swap(srcRects[idx].left,srcRects[idx].top); - ofs = 1; - break; - } - float u1 = srcRects[idx].left/(float)video.width; - float u2 = srcRects[idx].right/(float)video.width; - float v1 = srcRects[idx].top/(float)video.height; - float v2 = srcRects[idx].bottom/(float)video.height; - float u[] = {u1,u2,u2,u1}; - float v[] = {v1,v1,v2,v2}; - - const GLfloat backlightIntensity = displayInfo.backlightIntensity[i]; - - glColor4f(backlightIntensity, backlightIntensity, backlightIntensity, 1.0f); - glTexCoord2f(u[(ofs+0)%4],v[(ofs+0)%4]); - glVertex2i(dr[i].left,dr[i].top); - - glColor4f(backlightIntensity, backlightIntensity, backlightIntensity, 1.0f); - glTexCoord2f(u[(ofs+1)%4],v[(ofs+1)%4]); - glVertex2i(dr[i].right,dr[i].top); - - glColor4f(backlightIntensity, backlightIntensity, backlightIntensity, 1.0f); - glTexCoord2f(u[(ofs+2)%4],v[(ofs+2)%4]); - glVertex2i(dr[i].right,dr[i].bottom); - - glColor4f(backlightIntensity, backlightIntensity, backlightIntensity, 1.0f); - glTexCoord2f(u[(ofs+3)%4],v[(ofs+3)%4]); - glVertex2i(dr[i].left,dr[i].bottom); - } - - glEnd(); + // draw HUD + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, GPU_FRAMEBUFFER_NATIVE_WIDTH, GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2, 0, GL_BGRA, GL_UNSIGNED_BYTE, aggDraw.hud->buf().buf()); + OGL_DrawTexture(srcRects, dr); + glDisable(GL_BLEND); gldisplay.showPage(); @@ -1876,27 +1867,26 @@ static void DD_DoDisplay() ddraw.createBackSurface(video.rotatedwidth(),video.rotatedheight()); } - switch(ddraw.surfDescBack.ddpfPixelFormat.dwRGBBitCount) + switch (ddraw.surfDescBack.ddpfPixelFormat.dwRGBBitCount) { - case 32: - doRotate(ddraw.surfDescBack.lpSurface); - break; - case 24: - doRotate(ddraw.surfDescBack.lpSurface); - break; - case 16: - if(ddraw.surfDescBack.ddpfPixelFormat.dwGBitMask != 0x3E0) - doRotate(ddraw.surfDescBack.lpSurface); - else - doRotate(ddraw.surfDescBack.lpSurface); - break; - default: - { - if(ddraw.surfDescBack.ddpfPixelFormat.dwRGBBitCount != 0) - INFO("Unsupported color depth: %i bpp\n", ddraw.surfDescBack.ddpfPixelFormat.dwRGBBitCount); - //emu_halt(); - } - break; + case 32: + doRotate(ddraw.surfDescBack.lpSurface); + break; + case 24: + doRotate(ddraw.surfDescBack.lpSurface); + break; + case 16: + if (ddraw.surfDescBack.ddpfPixelFormat.dwGBitMask != 0x3E0) + doRotate(ddraw.surfDescBack.lpSurface); + else + doRotate(ddraw.surfDescBack.lpSurface); + break; + case 0: + break; + default: + INFO("Unsupported color depth: %i bpp\n", ddraw.surfDescBack.ddpfPixelFormat.dwRGBBitCount); + //emu_halt(); + break; } if (!ddraw.unlock()) return; @@ -2033,7 +2023,7 @@ static void DoDisplay_DrawHud() } //does a single display work unit. only to be used from the display thread -static void DoDisplay(bool firstTime) +static void DoDisplay() { Lock lock (win_backbuffer_sync); @@ -2050,26 +2040,11 @@ static void DoDisplay(bool firstTime) else ColorspaceConvertBuffer888XTo8888Opaque((u32*)video.srcBuffer, video.buffer, video.srcBufferSize / 4); - if(ddhw || ddsw) - { - const NDSDisplayInfo &displayInfo = GPU->GetDisplayInfo(); - const size_t pixCount = displayInfo.customWidth * displayInfo.customHeight; - - ColorspaceApplyIntensityToBuffer32(video.buffer, pixCount, displayInfo.backlightIntensity[NDSDisplayID_Main]); - ColorspaceApplyIntensityToBuffer32(video.buffer + pixCount, pixCount, displayInfo.backlightIntensity[NDSDisplayID_Touch]); - } - - if(firstTime) - { - //on single core systems, draw straight to the screen - //we only do this once per emulated frame because we don't want to waste time redrawing - //on such lousy computers - if(CommonSettings.single_core()) - { - aggDraw.hud->attach((u8*)video.buffer, video.width, video.height, video.width*4); - DoDisplay_DrawHud(); - } - } + //some games use the backlight for fading effects + const size_t pixCount = video.prefilterWidth * video.prefilterHeight / 2; + const NDSDisplayInfo &displayInfo = GPU->GetDisplayInfo(); + ColorspaceApplyIntensityToBuffer32(video.buffer, pixCount, displayInfo.backlightIntensity[NDSDisplayID_Main]); + ColorspaceApplyIntensityToBuffer32(video.buffer + pixCount, pixCount, displayInfo.backlightIntensity[NDSDisplayID_Touch]); if(AnyLuaActive()) { @@ -2084,19 +2059,19 @@ static void DoDisplay(bool firstTime) } } + // draw hud + aggDraw.hud->clear(); + DoDisplay_DrawHud(); + if (ddhw || ddsw) + { + // DirectDraw doesn't support alpha blending, so we must scale and overlay the HUD ourselves. + T_AGG_RGBA target((u8*)video.buffer, video.prefilterWidth, video.prefilterHeight, video.prefilterWidth * 4); + target.transformImage(aggDraw.hud->image(), 0, 0, video.prefilterWidth, video.prefilterHeight); + } + //apply user's filter video.filter(); - if(!CommonSettings.single_core()) - { - //draw and composite the OSD (but not if we are drawing osd straight to screen) - DoDisplay_DrawHud(); - T_AGG_RGBA target((u8*)video.finalBuffer(), video.width,video.height,video.width*4); - target.transformImage(aggDraw.hud->image(), 0,0,video.width,video.height); - aggDraw.hud->clear(); - } - - if(ddhw || ddsw) { gldisplay.kill(); @@ -2104,7 +2079,6 @@ static void DoDisplay(bool firstTime) } else { - //other cases..? OGL_DoDisplay(); } } @@ -2125,13 +2099,8 @@ void displayProc() currDisplayBuffer = todo; video.srcBuffer = (u8*)displayBuffers[currDisplayBuffer].buffer; video.srcBufferSize = displayBuffers[currDisplayBuffer].size; - - DoDisplay(true); - } - else - { - DoDisplay(false); } + DoDisplay(); } @@ -2178,7 +2147,7 @@ void Display() { video.srcBuffer = (u8*)dispInfo.masterCustomBuffer; video.srcBufferSize = dispInfo.customWidth * dispInfo.customHeight * dispInfo.pixelBytes * 2; - DoDisplay(true); + DoDisplay(); } else { @@ -2322,7 +2291,7 @@ static void StepRunLoop_Paused() if(CommonSettings.single_core() && GetActiveWindow() == mainLoopData.hwnd) { video.srcBuffer = (u8*)GPU->GetDisplayInfo().masterCustomBuffer; - DoDisplay(true); + DoDisplay(); } ServiceDisplayThreadInvocations(); @@ -3793,7 +3762,17 @@ void FixAspectRatio() void SetScreenGap(int gap) { + RECT clientRect; + GetClientRect(MainWindow->getHWnd(), &clientRect); + RECT rc; + GetWindowRect(MainWindow->getHWnd(), &rc); + if (video.rotation == 0 || video.rotation == 180) + rc.bottom += (gap - video.screengap) * (clientRect.right - clientRect.left) / GPU_FRAMEBUFFER_NATIVE_WIDTH; + else + rc.right += (gap - video.screengap) * (clientRect.bottom - clientRect.top - MainWindowToolbar->GetHeight()) / GPU_FRAMEBUFFER_NATIVE_WIDTH; video.screengap = gap; + MoveWindow(MainWindow->getHWnd(), rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE); + SetMinWindowSize(); FixAspectRatio(); UpdateWndRects(MainWindow->getHWnd()); @@ -5038,12 +5017,11 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM wndHeightGapless = (MainScreenRect.bottom - MainScreenRect.top) + (SubScreenRect.bottom - SubScreenRect.top); } - if(ForceRatio) - video.screengap = (wndHeight * video.width / wndWidth - video.height); - else - video.screengap = wndHeight * video.height / wndHeightGapless - video.height; + video.screengap = GPU_FRAMEBUFFER_NATIVE_WIDTH * (wndHeight - wndHeightGapless) / wndWidth; - UpdateWndRects(MainWindow->getHWnd()); + rc.bottom -= rc.top; rc.top = 0; + rc.right -= rc.left; rc.left = 0; + UpdateWndRects(MainWindow->getHWnd(), &rc); } } return 1; @@ -5208,7 +5186,7 @@ DOKEYDOWN: { const NDSDisplayInfo &dispInfo = GPU->GetDisplayInfo(); video.srcBuffer = (u8*)dispInfo.masterCustomBuffer; - DoDisplay(true); + DoDisplay(); } } @@ -6656,11 +6634,12 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp) } if(IsDlgCheckboxChecked(hw,IDC_TEXSCALE_1)) CommonSettings.GFX3D_Renderer_TextureScalingFactor = 1; - if(IsDlgCheckboxChecked(hw,IDC_TEXSCALE_2)) CommonSettings.GFX3D_Renderer_TextureScalingFactor = 2; - if(IsDlgCheckboxChecked(hw,IDC_TEXSCALE_4)) CommonSettings.GFX3D_Renderer_TextureScalingFactor = 4; + else if(IsDlgCheckboxChecked(hw,IDC_TEXSCALE_2)) CommonSettings.GFX3D_Renderer_TextureScalingFactor = 2; + else if(IsDlgCheckboxChecked(hw,IDC_TEXSCALE_4)) CommonSettings.GFX3D_Renderer_TextureScalingFactor = 4; if(IsDlgCheckboxChecked(hw, IDC_GPU_15BPP)) gpu_bpp = 15; - if(IsDlgCheckboxChecked(hw, IDC_GPU_18BPP)) gpu_bpp = 18; - if(IsDlgCheckboxChecked(hw, IDC_GPU_24BPP)) gpu_bpp = 24; + else if(IsDlgCheckboxChecked(hw, IDC_GPU_18BPP)) gpu_bpp = 18; + else if(IsDlgCheckboxChecked(hw, IDC_GPU_24BPP)) gpu_bpp = 24; + CommonSettings.GFX3D_Renderer_TextureDeposterize = IsDlgCheckboxChecked(hw,IDC_TEX_DEPOSTERIZE); CommonSettings.GFX3D_Renderer_TextureSmoothing = IsDlgCheckboxChecked(hw,IDC_TEX_SMOOTH); @@ -6668,11 +6647,18 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp) Lock lock(win_backbuffer_sync); if(display_mutex) slock_lock(display_mutex); Change3DCoreWithFallbackAndSave(ComboBox_GetCurSel(GetDlgItem(hw, IDC_3DCORE))); - video.SetPrescale(newPrescaleHD, 1); - GPU->SetCustomFramebufferSize(GPU_FRAMEBUFFER_NATIVE_WIDTH*video.prescaleHD, GPU_FRAMEBUFFER_NATIVE_HEIGHT*video.prescaleHD); + if (newPrescaleHD != video.prescaleHD) + { + video.SetPrescale(newPrescaleHD, 1); + GPU->SetCustomFramebufferSize(GPU_FRAMEBUFFER_NATIVE_WIDTH*video.prescaleHD, GPU_FRAMEBUFFER_NATIVE_HEIGHT*video.prescaleHD); + } SyncGpuBpp(); UpdateScreenRects(); if(display_mutex) slock_unlock(display_mutex); + // shrink buffer size if necessary + const NDSDisplayInfo &displayInfo = GPU->GetDisplayInfo(); + size_t newBufferSize = displayInfo.customWidth * displayInfo.customHeight * 2 * displayInfo.pixelBytes; + if (newBufferSize < video.srcBufferSize) video.srcBufferSize = newBufferSize; } WritePrivateProfileBool("3D", "HighResolutionInterpolateColor", CommonSettings.GFX3D_HighResolutionInterpolateColor, IniName); diff --git a/desmume/src/frontend/windows/resources.rc b/desmume/src/frontend/windows/resources.rc index bd5b841e1..32227d745 100644 --- a/desmume/src/frontend/windows/resources.rc +++ b/desmume/src/frontend/windows/resources.rc @@ -1398,7 +1398,7 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "OK",IDOK,50,45,50,14 PUSHBUTTON "Cancel",IDCANCEL,104,45,50,14 - COMBOBOX IDC_FONTCOMBO,7,23,147,199,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_FONTCOMBO,7,23,147,199,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Select a HUD font",IDC_START,7,7,74,14 END diff --git a/desmume/src/frontend/windows/video.h b/desmume/src/frontend/windows/video.h index c45517d1a..66938f33b 100644 --- a/desmume/src/frontend/windows/video.h +++ b/desmume/src/frontend/windows/video.h @@ -30,6 +30,8 @@ public: int width; int height; + int prefilterWidth; + int prefilterHeight; int rotation; int rotation_userset; @@ -59,6 +61,8 @@ public: this->prescaleHD = prescaleHD; this->prescalePost = prescalePost; + prefilterWidth = 256 * prescaleHD; + prefilterHeight = 192 * 2 * prescaleHD; prescaleTotal = prescaleHD; @@ -74,8 +78,8 @@ public: const int kPadSize = 4; // raw buffer - size_t rawBufferWidth = 256 * prescaleHD + (kPadSize * 2); - size_t rawBufferHeight = 192 * 2 * prescaleHD + (kPadSize * 2); + size_t rawBufferWidth = prefilterWidth + (kPadSize * 2); + size_t rawBufferHeight = prefilterHeight + (kPadSize * 2); rawBufferSize = rawBufferWidth * rawBufferHeight * 4; buffer_raw = buffer = (u32*)malloc_alignedCacheLine(rawBufferSize); @@ -90,8 +94,6 @@ public: // clean the new buffers clear(); - // prevent crashing when reducing the scaling - srcBufferSize = 0; } enum { @@ -134,8 +136,6 @@ public: void reset() { SetPrescale(1, 1); //should i do this here? - width = 256; - height = 384; } void setfilter(int filter) { @@ -148,42 +148,40 @@ public: switch (filter) { case NONE: - width = 256; - height = 384; + width = prefilterWidth; + height = prefilterHeight; break; case EPX1POINT5: case EPXPLUS1POINT5: case NEAREST1POINT5: case NEARESTPLUS1POINT5: - width = 256 * 3 / 2; - height = 384 * 3 / 2; + width = prefilterWidth * 3 / 2; + height = prefilterHeight * 3 / 2; break; case _5XBRZ: - width = 256 * 5; - height = 384 * 5; + width = prefilterWidth * 5; + height = prefilterHeight * 5; break; case HQ4X: case _4XBRZ: - width = 256 * 4; - height = 384 * 4; + width = prefilterWidth * 4; + height = prefilterHeight * 4; break; case _3XBRZ: - width = 256 * 3; - height = 384 * 3; + width = prefilterWidth * 3; + height = prefilterHeight * 3; break; case _2XBRZ: default: - width = 256 * 2; - height = 384 * 2; + width = prefilterWidth * 2; + height = prefilterHeight * 2; break; } - width *= prescaleHD; - height *= prescaleHD; ResizeBuffers(); }