1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

new .ini setting "d3d9_filter"

This commit is contained in:
FunkyFr3sh 2023-07-04 20:13:49 +02:00
parent 5fa01d8390
commit 4ec4260f8e
3 changed files with 12 additions and 6 deletions

View File

@ -32,6 +32,10 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute
#define RESLIST_MINI 1
#define RESLIST_FULL 2
#define FILTER_NEAREST 0
#define FILTER_LINEAR 1
#define FILTER_CUBIC 2
#define SDM_MODE_SET_BY_GAME 0x00000001l
#define SDM_LEAVE_WINDOWED 0x00000002l
#define SDM_LEAVE_FULLSCREEN 0x00000004l
@ -150,7 +154,7 @@ typedef struct CNCDDRAW
BOOL flipclear;
BOOL locktopleft;
BOOL lock_surfaces;
BOOL d3d9linear;
int d3d9_filter;
BOOL gdilinear;
BOOL d3d9on12;
int guard_lines;

View File

@ -45,7 +45,7 @@ void cfg_load()
g_ddraw->locktopleft = cfg_get_bool("locktopleft", FALSE);
g_ddraw->lock_surfaces = cfg_get_bool("lock_surfaces", FALSE);
g_ddraw->releasealt = cfg_get_bool("releasealt", FALSE);
g_ddraw->d3d9linear = cfg_get_bool("d3d9linear", TRUE);
g_ddraw->d3d9_filter = cfg_get_int("d3d9_filter", FILTER_CUBIC);
g_ddraw->gdilinear = cfg_get_bool("gdilinear", FALSE);
g_ddraw->d3d9on12 = cfg_get_bool("d3d9on12", FALSE);
g_ddraw->resolutions = cfg_get_int("resolutions", RESLIST_NORMAL);
@ -304,8 +304,9 @@ static void cfg_create_ini()
"; Should the window be resizable by the user in windowed mode?\n"
"resizable=true\n"
"\n"
"; Enable linear (D3DTEXF_LINEAR) upscaling filter for the direct3d9 renderer\n"
"d3d9linear=true\n"
"; Upscaling filter for the direct3d9 renderer\n"
"; Possible values: 0 = nearest-neighbor, 1 = bilinear, 2 = bicubic (16/32bit color depth games only)\n"
"d3d9_filter=2\n"
"\n"
"; Enable upscale hack for high resolution patches (Supports C&C1, Red Alert 1 and KKND Xtreme)\n"
"vhack=false\n"

View File

@ -352,7 +352,7 @@ static BOOL d3d9_set_states()
err = err || FAILED(IDirect3DDevice9_SetTexture(g_d3d9.device, 1, (IDirect3DBaseTexture9*)g_d3d9.palette_tex[0]));
BOOL bilinear =
g_ddraw->d3d9linear &&
g_ddraw->d3d9_filter &&
g_d3d9.pixel_shader_upscale &&
(g_ddraw->render.viewport.width != g_ddraw->width || g_ddraw->render.viewport.height != g_ddraw->height);
@ -369,10 +369,11 @@ static BOOL d3d9_set_states()
}
else
{
if (g_ddraw->d3d9linear)
if (g_ddraw->d3d9_filter)
{
if (SUCCEEDED(IDirect3DDevice9_SetSamplerState(g_d3d9.device, 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR)) &&
SUCCEEDED(IDirect3DDevice9_SetSamplerState(g_d3d9.device, 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR)) &&
g_ddraw->d3d9_filter == FILTER_CUBIC &&
g_d3d9.pixel_shader_upscale &&
(g_ddraw->render.viewport.width != g_ddraw->width || g_ddraw->render.viewport.height != g_ddraw->height) &&
SUCCEEDED(IDirect3DDevice9_SetPixelShader(g_d3d9.device, g_d3d9.pixel_shader_upscale)))