1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +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_MINI 1
#define RESLIST_FULL 2 #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_MODE_SET_BY_GAME 0x00000001l
#define SDM_LEAVE_WINDOWED 0x00000002l #define SDM_LEAVE_WINDOWED 0x00000002l
#define SDM_LEAVE_FULLSCREEN 0x00000004l #define SDM_LEAVE_FULLSCREEN 0x00000004l
@ -150,7 +154,7 @@ typedef struct CNCDDRAW
BOOL flipclear; BOOL flipclear;
BOOL locktopleft; BOOL locktopleft;
BOOL lock_surfaces; BOOL lock_surfaces;
BOOL d3d9linear; int d3d9_filter;
BOOL gdilinear; BOOL gdilinear;
BOOL d3d9on12; BOOL d3d9on12;
int guard_lines; int guard_lines;

View File

@ -45,7 +45,7 @@ void cfg_load()
g_ddraw->locktopleft = cfg_get_bool("locktopleft", FALSE); g_ddraw->locktopleft = cfg_get_bool("locktopleft", FALSE);
g_ddraw->lock_surfaces = cfg_get_bool("lock_surfaces", FALSE); g_ddraw->lock_surfaces = cfg_get_bool("lock_surfaces", FALSE);
g_ddraw->releasealt = cfg_get_bool("releasealt", 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->gdilinear = cfg_get_bool("gdilinear", FALSE);
g_ddraw->d3d9on12 = cfg_get_bool("d3d9on12", FALSE); g_ddraw->d3d9on12 = cfg_get_bool("d3d9on12", FALSE);
g_ddraw->resolutions = cfg_get_int("resolutions", RESLIST_NORMAL); 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" "; Should the window be resizable by the user in windowed mode?\n"
"resizable=true\n" "resizable=true\n"
"\n" "\n"
"; Enable linear (D3DTEXF_LINEAR) upscaling filter for the direct3d9 renderer\n" "; Upscaling filter for the direct3d9 renderer\n"
"d3d9linear=true\n" "; Possible values: 0 = nearest-neighbor, 1 = bilinear, 2 = bicubic (16/32bit color depth games only)\n"
"d3d9_filter=2\n"
"\n" "\n"
"; Enable upscale hack for high resolution patches (Supports C&C1, Red Alert 1 and KKND Xtreme)\n" "; Enable upscale hack for high resolution patches (Supports C&C1, Red Alert 1 and KKND Xtreme)\n"
"vhack=false\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])); err = err || FAILED(IDirect3DDevice9_SetTexture(g_d3d9.device, 1, (IDirect3DBaseTexture9*)g_d3d9.palette_tex[0]));
BOOL bilinear = BOOL bilinear =
g_ddraw->d3d9linear && g_ddraw->d3d9_filter &&
g_d3d9.pixel_shader_upscale && g_d3d9.pixel_shader_upscale &&
(g_ddraw->render.viewport.width != g_ddraw->width || g_ddraw->render.viewport.height != g_ddraw->height); (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 else
{ {
if (g_ddraw->d3d9linear) if (g_ddraw->d3d9_filter)
{ {
if (SUCCEEDED(IDirect3DDevice9_SetSamplerState(g_d3d9.device, 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR)) && if (SUCCEEDED(IDirect3DDevice9_SetSamplerState(g_d3d9.device, 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR)) &&
SUCCEEDED(IDirect3DDevice9_SetSamplerState(g_d3d9.device, 0, D3DSAMP_MINFILTER, 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_d3d9.pixel_shader_upscale &&
(g_ddraw->render.viewport.width != g_ddraw->width || g_ddraw->render.viewport.height != g_ddraw->height) && (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))) SUCCEEDED(IDirect3DDevice9_SetPixelShader(g_d3d9.device, g_d3d9.pixel_shader_upscale)))