@@ -127,6 +127,32 @@ static const float IdentityMatrix[] = {
127127 0.0 , 0.0 , 0.0 , 1.0
128128};
129129
130+ static inline GLint get_texture_min_func () {
131+ // convert prefs texture filtering mode to GL min func value
132+ switch (gShockPrefs .doTextureFilter ) {
133+ case 0 : return GL_NEAREST;
134+ case 1 : return GL_LINEAR;
135+ // case 2: return GL_LINEAR_MIPMAP_LINEAR;
136+ }
137+
138+ WARN (" gShockPrefs.doTextureFilter=%d is invalid; resetting to zero (unflitered)" , gShockPrefs .doTextureFilter );
139+ gShockPrefs .doTextureFilter = 0 ;
140+ return GL_NEAREST;
141+ }
142+
143+ static inline GLint get_texture_mag_func () {
144+ // convert prefs texture filtering mode to GL mag func value
145+ switch (gShockPrefs .doTextureFilter ) {
146+ case 0 : return GL_NEAREST;
147+ case 1 : return GL_LINEAR;
148+ case 2 : return GL_LINEAR;
149+ }
150+
151+ WARN (" gShockPrefs.doTextureFilter=%d is invalid; resetting to zero (unflitered)" , gShockPrefs .doTextureFilter );
152+ gShockPrefs .doTextureFilter = 0 ;
153+ return GL_NEAREST;
154+ }
155+
130156static void set_blend_mode (bool enabled) {
131157 // change the blend mode, if not set already
132158 if (blend_enabled != enabled) {
@@ -475,16 +501,22 @@ void opengl_swap_and_restore() {
475501}
476502
477503void toggle_opengl () {
478- if (!gShockPrefs .doUseOpenGL ) {
479- message_info (" OpenGL rendering, no texture filter" );
480- gShockPrefs .doUseOpenGL = true ;
481- gShockPrefs .doLinearScaling = false ;
482- } else if (!gShockPrefs .doLinearScaling ) {
483- message_info (" OpenGL rendering, linear texture filter" );
484- gShockPrefs .doLinearScaling = true ;
504+ if (gShockPrefs .doUseOpenGL ) {
505+ switch (gShockPrefs .doTextureFilter ) {
506+ case 0 : {
507+ message_info (" Switching to OpenGL bilinear rendering" );
508+ gShockPrefs .doTextureFilter = 1 ;
509+ } break ;
510+ case 1 : {
511+ message_info (" Switching to sofware rendering" );
512+ gShockPrefs .doUseOpenGL = false ;
513+ gShockPrefs .doTextureFilter = 0 ;
514+ } break ;
515+ }
485516 } else {
486- message_info (" Software rendering" );
487- gShockPrefs .doUseOpenGL = false ;
517+ message_info (" Switching to OpenGL unfiltered" );
518+ gShockPrefs .doUseOpenGL = true ;
519+ gShockPrefs .doTextureFilter = 0 ;
488520 }
489521 SavePrefs ();
490522}
@@ -695,8 +727,8 @@ int opengl_light_tmap(int n, g3s_phandle *vp, grs_bitmap *bm) {
695727 glUseProgram (textureShaderProgram.shaderProgram );
696728
697729 set_texture (bm);
698- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
699- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
730+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, get_texture_min_func () );
731+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, get_texture_mag_func () );
700732
701733 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
702734 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
@@ -743,8 +775,8 @@ int opengl_bitmap(grs_bitmap *bm, int n, grs_vertex **vpl, grs_tmap_info *ti) {
743775 glUniformMatrix4fv (textureShaderProgram.uniProj , 1 , false , IdentityMatrix);
744776
745777 set_texture (bm);
746- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
747- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
778+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, get_texture_min_func () );
779+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, get_texture_mag_func () );
748780
749781 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
750782 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
@@ -819,8 +851,8 @@ int opengl_draw_poly(long c, int n_verts, g3s_phandle *p, char gour_flag) {
819851 set_color (color.r , color.g , color.b , 255 );
820852 }
821853
822- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
823- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
854+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, get_texture_min_func () );
855+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, get_texture_mag_func () );
824856
825857 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
826858 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
@@ -861,8 +893,8 @@ void opengl_begin_stars() {
861893
862894 set_blend_mode (true );
863895
864- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
865- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gShockPrefs . doLinearScaling ? GL_LINEAR : GL_NEAREST );
896+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, get_texture_mag_func () );
897+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, get_texture_mag_func () );
866898
867899 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
868900 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
0 commit comments