Skip to content

Commit

Permalink
Merge pull request #1091 from apartfromtime/Texture-filter-menu-option
Browse files Browse the repository at this point in the history
Texture filtering options for OpenGL and Software video modes
  • Loading branch information
Yamagi committed Mar 19, 2024
2 parents 6c21caa + 26194c7 commit 9569f41
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 26 deletions.
98 changes: 73 additions & 25 deletions src/client/menu/videomenu.c
Expand Up @@ -189,17 +189,33 @@ ResetDefaults(void *unused)
static void
ApplyFilter(void* unused)
{
if (s_filter_list.curvalue == 0)
if (Q_stricmp(vid_renderer->string, "gl3") == 0 || Q_stricmp(vid_renderer->string, "gles3") == 0 ||
Q_stricmp(vid_renderer->string, "gl1") == 0)
{
Cvar_Set("gl_texturemode", "GL_NEAREST");
}
else if (s_filter_list.curvalue == 1)
{
Cvar_Set("gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST");
if (s_filter_list.curvalue == 0)
{
Cvar_Set("gl_texturemode", "GL_NEAREST");
}
else if (s_filter_list.curvalue == 1)
{
Cvar_Set("gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST");
}
else if (s_filter_list.curvalue == 2)
{
Cvar_Set("gl_texturemode", "GL_LINEAR_MIPMAP_LINEAR");
}
}
else if (s_filter_list.curvalue == 2)

if (Q_stricmp(vid_renderer->string, "soft") == 0)
{
Cvar_Set("gl_texturemode", "GL_LINEAR_MIPMAP_LINEAR");
if (s_filter_list.curvalue == 0)
{
Cvar_Set("sw_texture_filtering", "0");
}
else if (s_filter_list.curvalue == 1)
{
Cvar_Set("sw_texture_filtering", "1");
}
}
}

Expand Down Expand Up @@ -404,6 +420,12 @@ VID_MenuInit(void)
0
};

static const char *onoff_names[] = {
"off",
"on",
0
};

static const char *yesno_names[] = {
"no",
"yes",
Expand Down Expand Up @@ -699,29 +721,51 @@ VID_MenuInit(void)
pow(2, s_msaa_list.curvalue) <= gl_msaa_samples->value);
s_msaa_list.curvalue--;
}

s_filter_list.generic.type = MTYPE_SPINCONTROL;
s_filter_list.generic.name = "texture filter";
s_filter_list.generic.x = 0;
s_filter_list.generic.y = (y += 10);
s_filter_list.itemnames = filter_names;
s_filter_list.curvalue = 0;
s_filter_list.generic.callback = ApplyFilter;

const char* filter = Cvar_VariableString("gl_texturemode");
int mode = 3;

if (Q_stricmp(filter, "GL_NEAREST") == 0)
{
mode = 0;
}
else if (Q_stricmp(filter, "GL_LINEAR_MIPMAP_NEAREST") == 0)
{
mode = 1;
const char* filter = NULL;
int mode = 0;

if (Q_stricmp(vid_renderer->string, "gl3") == 0 || Q_stricmp(vid_renderer->string, "gles3") == 0 ||
Q_stricmp(vid_renderer->string, "gl1") == 0)
{
s_filter_list.generic.x = 0;
s_filter_list.generic.y = (y += 10);
s_filter_list.itemnames = filter_names;

filter = Cvar_VariableString("gl_texturemode");
mode = 3;

if (Q_stricmp(filter, "GL_NEAREST") == 0)
{
mode = 0;
}
else if (Q_stricmp(filter, "GL_LINEAR_MIPMAP_NEAREST") == 0)
{
mode = 1;
}
else if (Q_stricmp(filter, "GL_LINEAR_MIPMAP_LINEAR") == 0)
{
mode = 2;
}
}
else if (Q_stricmp(filter, "GL_LINEAR_MIPMAP_LINEAR") == 0)
else if (Q_stricmp(vid_renderer->string, "soft") == 0)
{
mode = 2;
s_filter_list.generic.x = 0;
s_filter_list.generic.y = (y += 10);
s_filter_list.itemnames = onoff_names;

filter = Cvar_VariableString("sw_texture_filtering");
mode = 0;

if (Q_stricmp(filter, "1") == 0)
{
mode = 1;
}
}

s_filter_list.curvalue = mode;
Expand Down Expand Up @@ -772,7 +816,11 @@ VID_MenuInit(void)
Menu_AddItem(&s_opengl_menu, (void *)&s_vsync_list);
Menu_AddItem(&s_opengl_menu, (void *)&s_af_list);
Menu_AddItem(&s_opengl_menu, (void *)&s_msaa_list);
Menu_AddItem(&s_opengl_menu, (void *)&s_filter_list);
if (Q_stricmp(vid_renderer->string, "gl3") == 0 || Q_stricmp(vid_renderer->string, "gles3") == 0 ||
Q_stricmp(vid_renderer->string, "gl1") == 0 || Q_stricmp(vid_renderer->string, "soft") == 0)
{
Menu_AddItem(&s_opengl_menu, (void *)&s_filter_list);
}
Menu_AddItem(&s_opengl_menu, (void *)&s_defaults_action);
Menu_AddItem(&s_opengl_menu, (void *)&s_apply_action);

Expand Down
2 changes: 1 addition & 1 deletion src/client/refresh/soft/sw_main.c
Expand Up @@ -1332,7 +1332,7 @@ RE_RenderFrame (refdef_t *fd)
// compare current position with old
if (vid_buffer_width <= 640 ||
!VectorCompareRound(fd->vieworg, lastvieworg) ||
!VectorCompare(fd->viewangles, lastviewangles))
!VectorCompareRound(fd->viewangles, lastviewangles))
{
fastmoving = true;
}
Expand Down

0 comments on commit 9569f41

Please sign in to comment.