Skip to content

Commit 70c0f8f

Browse files
committed
rendergl: Check for GL 4.6 anisotropic TF extension
OpenGL 4.6 has brought an extension for anisotropic filtering that can work alongside our existing GL_EXT_texture_filter_anisotropic code: check for this new extension and, if supported, make use of it. Link: https://registry.khronos.org/OpenGL/extensions/ARB/ARB_texture_filter_anisotropic.txt
1 parent a43d7db commit 70c0f8f

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/engine/engine.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ static inline bool pvsoccluded(const ivec &bborigin, int size)
206206
}
207207

208208
// rendergl
209-
extern bool hasVAO, hasFBO, hasAFBO, hasDS, hasTF, hasTRG, hasTSW, hasS3TC, hasFXT1, hasLATC, hasRGTC, hasAF, hasFBB, hasUBO, hasMBR;
210-
extern int glversion, glslversion, glcompat;
209+
extern bool hasVAO, hasFBO, hasAFBO, hasDS, hasTF, hasTRG, hasTSW, hasS3TC, hasFXT1, hasLATC, hasRGTC, hasFBB, hasUBO, hasMBR;
210+
extern int glversion, glslversion, glcompat, hasAF;
211211
extern char *gfxvendor, *gfxrenderer, *gfxversion;
212212

213213
enum { DRAWTEX_NONE = 0, DRAWTEX_ENVMAP, DRAWTEX_MINIMAP, DRAWTEX_MODELPREVIEW };

src/engine/rendergl.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// rendergl.cpp: core opengl rendering stuff
22
#include "engine.h"
33

4-
bool hasVAO = false, hasFBO = false, hasAFBO = false, hasDS = false, hasTF = false, hasTRG = false, hasTSW = false, hasS3TC = false, hasFXT1 = false, hasLATC = false, hasRGTC = false, hasAF = false, hasFBB = false, hasUBO = false, hasMBR = false;
4+
bool hasVAO = false, hasFBO = false, hasAFBO = false, hasDS = false, hasTF = false, hasTRG = false, hasTSW = false, hasS3TC = false, hasFXT1 = false, hasLATC = false, hasRGTC = false, hasFBB = false, hasUBO = false, hasMBR = false;
5+
int hasAF = 0;
56

67
VAR(IDF_READONLY, glversion, 1, 0, 0);
78
VAR(IDF_READONLY, glslversion, 1, 0, 0);
@@ -562,13 +563,21 @@ void gl_checkextensions()
562563
if(glversion < 300 && dbgexts) conoutf("\frUsing GL_ARB_texture_compression_rgtc extension.");
563564
}
564565

565-
if(hasext("GL_EXT_texture_filter_anisotropic"))
566-
{
566+
if ((glversion >= 460 || hasext("GL_ARB_texture_filter_anisotropic")) ||
567+
hasext("GL_EXT_texture_filter_anisotropic")) {
567568
GLint val;
568-
glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &val);
569+
570+
if (hasext("GL_ARB_texture_filter_anisotropic")) {
571+
glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &val);
572+
hasAF = 1;
573+
} else {
574+
glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &val);
575+
hasAF = 2;
576+
}
577+
569578
hwmaxanisotropy = val;
570-
hasAF = true;
571-
if(dbgexts) conoutf("\frUsing GL_EXT_texture_filter_anisotropic extension.");
579+
if (dbgexts)
580+
conoutf("\frUsing GL_*_texture_filter_anisotropic extension.");
572581
}
573582

574583
if(glversion >= 300 || hasext("GL_EXT_gpu_shader4"))

src/engine/texture.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,12 @@ void setuptexparameters(int tnum, void *pixels, int clamp, int filter, GLenum fo
784784
glBindTexture(target, tnum);
785785
glTexParameteri(target, GL_TEXTURE_WRAP_S, clamp&1 ? GL_CLAMP_TO_EDGE : (clamp&0x100 ? GL_MIRRORED_REPEAT : GL_REPEAT));
786786
if(target!=GL_TEXTURE_1D) glTexParameteri(target, GL_TEXTURE_WRAP_T, clamp&2 ? GL_CLAMP_TO_EDGE : (clamp&0x200 ? GL_MIRRORED_REPEAT : GL_REPEAT));
787-
if(target==GL_TEXTURE_2D && hasAF && min(anisotropy, hwmaxanisotropy) > 0 && filter > 1) glTexParameteri(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, min(anisotropy, hwmaxanisotropy));
787+
if (target == GL_TEXTURE_2D && min(anisotropy, hwmaxanisotropy) > 0 && filter > 1) {
788+
if (hasAF == 1)
789+
glTexParameteri(target, GL_TEXTURE_MAX_ANISOTROPY, min(anisotropy, hwmaxanisotropy));
790+
else if (hasAF == 2)
791+
glTexParameteri(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, min(anisotropy, hwmaxanisotropy));
792+
}
788793
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, filter && bilinear ? GL_LINEAR : GL_NEAREST);
789794
glTexParameteri(target, GL_TEXTURE_MIN_FILTER,
790795
filter > 1 ?

0 commit comments

Comments
 (0)