Make mipmap filters other than GL_LINEAR_MIPMAP_LINEAR work
GLTexture would set both the minification and magnification filters to GL_NEAREST if the texture filter was set to any mipmap filter other than GL_LINEAR_MIPMAP_LINEAR.icc-effect-5.14.5
parent
aefadfaa6a
commit
ccf1bad426
|
@ -306,26 +306,34 @@ void GLTexture::bind()
|
||||||
d->onDamage();
|
d->onDamage();
|
||||||
}
|
}
|
||||||
if (d->m_filterChanged) {
|
if (d->m_filterChanged) {
|
||||||
if (d->m_filter == GL_LINEAR_MIPMAP_LINEAR) {
|
GLenum minFilter = GL_NEAREST;
|
||||||
// trilinear filtering requested, but is it possible?
|
GLenum magFilter = GL_NEAREST;
|
||||||
if (d->s_supportsFramebufferObjects && d->m_canUseMipmaps) {
|
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
switch (d->m_filter) {
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
case GL_NEAREST:
|
||||||
} else {
|
minFilter = magFilter = GL_NEAREST;
|
||||||
// can't use trilinear, so use bilinear
|
break;
|
||||||
d->m_filter = GL_LINEAR;
|
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
case GL_LINEAR:
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
minFilter = magFilter = GL_LINEAR;
|
||||||
}
|
break;
|
||||||
} else if (d->m_filter == GL_LINEAR) {
|
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
case GL_NEAREST_MIPMAP_NEAREST:
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
case GL_NEAREST_MIPMAP_LINEAR:
|
||||||
} else {
|
magFilter = GL_NEAREST;
|
||||||
// if neither trilinear nor bilinear, default to fast filtering
|
minFilter = d->m_canUseMipmaps ? d->m_filter : GL_NEAREST;
|
||||||
d->m_filter = GL_NEAREST;
|
break;
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
||||||
glTexParameteri(d->m_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
case GL_LINEAR_MIPMAP_NEAREST:
|
||||||
|
case GL_LINEAR_MIPMAP_LINEAR:
|
||||||
|
magFilter = GL_LINEAR;
|
||||||
|
minFilter = d->m_canUseMipmaps ? d->m_filter : GL_LINEAR;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glTexParameteri(d->m_target, GL_TEXTURE_MIN_FILTER, minFilter);
|
||||||
|
glTexParameteri(d->m_target, GL_TEXTURE_MAG_FILTER, magFilter);
|
||||||
|
|
||||||
d->m_filterChanged = false;
|
d->m_filterChanged = false;
|
||||||
}
|
}
|
||||||
if (d->m_wrapModeChanged) {
|
if (d->m_wrapModeChanged) {
|
||||||
|
|
Loading…
Reference in New Issue