diff --git a/lang/English.ini b/lang/English.ini index df41d2294..28d17d7f7 100644 --- a/lang/English.ini +++ b/lang/English.ini @@ -128,8 +128,8 @@ FAST = "Fast" ACCURATE = "Accurate" INTERPOLATION = "Interpolation" NEAREST = "Nearest" -LINEAR = "Linear" -TRIPOINT = "Tripoint" +LINEAR = "Bilinear" +TRIPOINT = "Trilinear" FILTERING = "Filtering" D0P5X = "0.5x" D1X = "1x" @@ -201,8 +201,8 @@ BOUNCY_BOUNDS_ON_CAP = "ON (Capped)" BOUNCY_BOUNDS_ON = "ON" BOUNCY_BOUNDS_OFF = "OFF" BOUNCY_LEVEL_BOUNDS = "Bouncy Level Bounds" -AMOUNT_OF_PLAYERS = "Amount of players" -PAUSE_ANYWHERE = "Pause anywhere" +AMOUNT_OF_PLAYERS = "Amount Of Players" +PAUSE_ANYWHERE = "Pause Anywhere" [HOST] SERVER_TITLE = "SERVER" diff --git a/mods/arena/main.lua b/mods/arena/main.lua index 50276bbe1..91b28638d 100644 --- a/mods/arena/main.lua +++ b/mods/arena/main.lua @@ -1,6 +1,6 @@ -- name: Arena -- description: A arena-shooter inspired game mode with custom weapons and levels.\nSeven gamemodes in one, three custom stages, five weapons. --- incompatible: gamemode arena light +-- incompatible: gamemode arena -- deluxe: true if SM64COOPDX_VERSION == nil then return end diff --git a/src/pc/gfx/gfx_opengl.c b/src/pc/gfx/gfx_opengl.c index 0daae5fa6..0df60f58a 100644 --- a/src/pc/gfx/gfx_opengl.c +++ b/src/pc/gfx/gfx_opengl.c @@ -50,7 +50,7 @@ struct ShaderProgram { bool used_textures[2]; uint8_t num_floats; GLint attrib_locations[7]; - GLint uniform_locations[6]; + GLint uniform_locations[7]; uint8_t attrib_sizes[7]; uint8_t num_attribs; bool used_noise; @@ -96,6 +96,7 @@ static void gfx_opengl_vertex_array_set_attribs(struct ShaderProgram *prg) { static inline void gfx_opengl_set_shader_uniforms(struct ShaderProgram *prg) { if (prg->used_noise) { glUniform1f(prg->uniform_locations[4], (float)frame_count); } if (prg->used_lightmap) { glUniform3f(prg->uniform_locations[5], gVertexColor[0] / 255.0f, gVertexColor[1] / 255.0f, gVertexColor[2] / 255.0f); } + glUniform1i(prg->uniform_locations[6], configFiltering); } static inline void gfx_opengl_set_texture_uniforms(struct ShaderProgram *prg, const int tile) { @@ -341,30 +342,23 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC // 3 point texture filtering // Original author: ArthurCarvalho - // Slightly modified GLSL implementation by twinaphex, mupen64plus-libretro project. - + // Modified GLSL implementation by twinaphex, mupen64plus-libretro project. if (ccf.used_textures[0] || ccf.used_textures[1]) { - if (configFiltering == 2) { - append_line(fs_buf, &fs_len, "#define TEX_OFFSET(off) texture2D(tex, texCoord - (off)/texSize)"); - append_line(fs_buf, &fs_len, "vec4 filter3point(in sampler2D tex, in vec2 texCoord, in vec2 texSize) {"); - append_line(fs_buf, &fs_len, " vec2 offset = fract(texCoord*texSize - vec2(0.5));"); - append_line(fs_buf, &fs_len, " offset -= step(1.0, offset.x + offset.y);"); - append_line(fs_buf, &fs_len, " vec4 c0 = TEX_OFFSET(offset);"); - append_line(fs_buf, &fs_len, " vec4 c1 = TEX_OFFSET(vec2(offset.x - sign(offset.x), offset.y));"); - append_line(fs_buf, &fs_len, " vec4 c2 = TEX_OFFSET(vec2(offset.x, offset.y - sign(offset.y)));"); - append_line(fs_buf, &fs_len, " return c0 + abs(offset.x)*(c1-c0) + abs(offset.y)*(c2-c0);"); - append_line(fs_buf, &fs_len, "}"); - append_line(fs_buf, &fs_len, "vec4 sampleTex(in sampler2D tex, in vec2 uv, in vec2 texSize, in bool dofilter) {"); - append_line(fs_buf, &fs_len, "if (dofilter)"); - append_line(fs_buf, &fs_len, "return filter3point(tex, uv, texSize);"); - append_line(fs_buf, &fs_len, "else"); - append_line(fs_buf, &fs_len, "return texture2D(tex, uv);"); - append_line(fs_buf, &fs_len, "}"); - } else { - append_line(fs_buf, &fs_len, "vec4 sampleTex(in sampler2D tex, in vec2 uv, in vec2 texSize, in bool dofilter) {"); - append_line(fs_buf, &fs_len, "return texture2D(tex, uv);"); - append_line(fs_buf, &fs_len, "}"); - } + append_line(fs_buf, &fs_len, "#define TEX_OFFSET(off) texture2D(tex, texCoord - (off)/texSize)"); + append_line(fs_buf, &fs_len, "vec4 filter3point(in sampler2D tex, in vec2 texCoord, in vec2 texSize) {"); + append_line(fs_buf, &fs_len, " vec2 offset = fract(texCoord*texSize - vec2(0.5));"); + append_line(fs_buf, &fs_len, " offset -= step(1.0, offset.x + offset.y);"); + append_line(fs_buf, &fs_len, " vec4 c0 = TEX_OFFSET(offset);"); + append_line(fs_buf, &fs_len, " vec4 c1 = TEX_OFFSET(vec2(offset.x - sign(offset.x), offset.y));"); + append_line(fs_buf, &fs_len, " vec4 c2 = TEX_OFFSET(vec2(offset.x, offset.y - sign(offset.y)));"); + append_line(fs_buf, &fs_len, " return c0 + abs(offset.x)*(c1-c0) + abs(offset.y)*(c2-c0);"); + append_line(fs_buf, &fs_len, "}"); + append_line(fs_buf, &fs_len, "vec4 sampleTex(in sampler2D tex, in vec2 uv, in vec2 texSize, in bool dofilter, in int filter) {"); + append_line(fs_buf, &fs_len, " if (dofilter && filter == 2)"); + append_line(fs_buf, &fs_len, " return filter3point(tex, uv, texSize);"); + append_line(fs_buf, &fs_len, " else"); + append_line(fs_buf, &fs_len, " return texture2D(tex, uv);"); + append_line(fs_buf, &fs_len, "}"); } if ((opt_alpha && opt_dither) || ccf.do_noise) { @@ -380,6 +374,8 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC append_line(fs_buf, &fs_len, "uniform vec3 uLightmapColor;"); } + append_line(fs_buf, &fs_len, "uniform int uFilter;"); + append_line(fs_buf, &fs_len, "void main() {"); if ((opt_alpha && opt_dither) || ccf.do_noise) { @@ -387,15 +383,15 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC } if (ccf.used_textures[0]) { - append_line(fs_buf, &fs_len, "vec4 texVal0 = sampleTex(uTex0, vTexCoord, uTex0Size, uTex0Filter);"); + append_line(fs_buf, &fs_len, "vec4 texVal0 = sampleTex(uTex0, vTexCoord, uTex0Size, uTex0Filter, uFilter);"); } if (ccf.used_textures[1]) { if (opt_light_map) { - append_line(fs_buf, &fs_len, "vec4 texVal1 = sampleTex(uTex1, vLightMap, uTex1Size, uTex1Filter);"); + append_line(fs_buf, &fs_len, "vec4 texVal1 = sampleTex(uTex1, vLightMap, uTex1Size, uTex1Filter, uFilter);"); append_line(fs_buf, &fs_len, "texVal0.rgb *= uLightmapColor.rgb;"); append_line(fs_buf, &fs_len, "texVal1.rgb = texVal1.rgb * texVal1.rgb + texVal1.rgb;"); } else { - append_line(fs_buf, &fs_len, "vec4 texVal1 = sampleTex(uTex1, vTexCoord, uTex1Size, uTex1Filter);"); + append_line(fs_buf, &fs_len, "vec4 texVal1 = sampleTex(uTex1, vTexCoord, uTex1Size, uTex1Filter, uFilter);"); } } @@ -561,6 +557,8 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC } else { prg->used_lightmap = false; } + + prg->uniform_locations[6] = glGetUniformLocation(shader_program, "uFilter"); return prg; }