Added mipmap support to Image filter struct and OpenGL texture filter helper functions

This commit is contained in:
Alexander Szpakowski
2013-01-01 21:44:27 -04:00
parent 1678252b7a
commit ab98b0de45
3 changed files with 38 additions and 8 deletions
+1
View File
@@ -30,6 +30,7 @@ Image::Filter Image::defaultFilter;
Image::Filter::Filter()
: min(FILTER_LINEAR)
, mag(FILTER_LINEAR)
, mipmap(FILTER_NONE)
{
}
+2
View File
@@ -46,6 +46,7 @@ public:
{
FILTER_LINEAR = 1,
FILTER_NEAREST,
FILTER_NONE,
FILTER_MAX_ENUM
};
@@ -54,6 +55,7 @@ public:
Filter();
FilterMode min;
FilterMode mag;
FilterMode mipmap;
};
struct Wrap
+35 -8
View File
@@ -56,16 +56,27 @@ void setTextureFilter(const graphics::Image::Filter &f)
{
GLint gmin, gmag;
switch (f.min)
if (f.mipmap == Image::FILTER_NONE)
{
case Image::FILTER_NEAREST:
gmin = GL_NEAREST;
break;
case Image::FILTER_LINEAR:
default:
gmin = GL_LINEAR;
break;
if (f.min == Image::FILTER_NEAREST)
gmin = GL_NEAREST;
else // f.min == Image::FILTER_LINEAR
gmin = GL_LINEAR;
}
else
{
if (f.min == f.mipmap == Image::FILTER_NEAREST)
gmin = GL_NEAREST_MIPMAP_NEAREST;
else if (f.min == Image::FILTER_NEAREST && f.mipmap == Image::FILTER_LINEAR)
gmin = GL_NEAREST_MIPMAP_LINEAR;
else if (f.min == Image::FILTER_LINEAR && f.mipmap == Image::FILTER_NEAREST)
gmin = GL_LINEAR_MIPMAP_NEAREST;
else if (f.min == f.mipmap == Image::FILTER_LINEAR)
gmin = GL_LINEAR_MIPMAP_LINEAR;
else
gmin = GL_LINEAR;
}
switch (f.mag)
{
@@ -94,10 +105,26 @@ graphics::Image::Filter getTextureFilter()
{
case GL_NEAREST:
f.min = Image::FILTER_NEAREST;
f.mipmap = Image::FILTER_NONE;
break;
case GL_NEAREST_MIPMAP_NEAREST:
f.min = f.mipmap = Image::FILTER_NEAREST;
break;
case GL_NEAREST_MIPMAP_LINEAR:
f.min = Image::FILTER_NEAREST;
f.mipmap = Image::FILTER_LINEAR;
break;
case GL_LINEAR_MIPMAP_NEAREST:
f.min = Image::FILTER_LINEAR;
f.mipmap = Image::FILTER_NEAREST;
break;
case GL_LINEAR_MIPMAP_LINEAR:
f.min = f.mipmap = Image::FILTER_LINEAR;
break;
case GL_LINEAR:
default:
f.min = Image::FILTER_LINEAR;
f.mipmap = Image::FILTER_NONE;
break;
}