mirror of
https://github.com/love2d/love.git
synced 2026-08-19 20:19:42 +02:00
Added mipmap support to Image filter struct and OpenGL texture filter helper functions
This commit is contained in:
@@ -30,6 +30,7 @@ Image::Filter Image::defaultFilter;
|
|||||||
Image::Filter::Filter()
|
Image::Filter::Filter()
|
||||||
: min(FILTER_LINEAR)
|
: min(FILTER_LINEAR)
|
||||||
, mag(FILTER_LINEAR)
|
, mag(FILTER_LINEAR)
|
||||||
|
, mipmap(FILTER_NONE)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ public:
|
|||||||
{
|
{
|
||||||
FILTER_LINEAR = 1,
|
FILTER_LINEAR = 1,
|
||||||
FILTER_NEAREST,
|
FILTER_NEAREST,
|
||||||
|
FILTER_NONE,
|
||||||
FILTER_MAX_ENUM
|
FILTER_MAX_ENUM
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -54,6 +55,7 @@ public:
|
|||||||
Filter();
|
Filter();
|
||||||
FilterMode min;
|
FilterMode min;
|
||||||
FilterMode mag;
|
FilterMode mag;
|
||||||
|
FilterMode mipmap;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Wrap
|
struct Wrap
|
||||||
|
|||||||
@@ -56,16 +56,27 @@ void setTextureFilter(const graphics::Image::Filter &f)
|
|||||||
{
|
{
|
||||||
GLint gmin, gmag;
|
GLint gmin, gmag;
|
||||||
|
|
||||||
switch (f.min)
|
if (f.mipmap == Image::FILTER_NONE)
|
||||||
{
|
{
|
||||||
case Image::FILTER_NEAREST:
|
if (f.min == Image::FILTER_NEAREST)
|
||||||
gmin = GL_NEAREST;
|
gmin = GL_NEAREST;
|
||||||
break;
|
else // f.min == Image::FILTER_LINEAR
|
||||||
case Image::FILTER_LINEAR:
|
gmin = GL_LINEAR;
|
||||||
default:
|
|
||||||
gmin = GL_LINEAR;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
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)
|
switch (f.mag)
|
||||||
{
|
{
|
||||||
@@ -94,10 +105,26 @@ graphics::Image::Filter getTextureFilter()
|
|||||||
{
|
{
|
||||||
case GL_NEAREST:
|
case GL_NEAREST:
|
||||||
f.min = Image::FILTER_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;
|
break;
|
||||||
case GL_LINEAR:
|
case GL_LINEAR:
|
||||||
default:
|
default:
|
||||||
f.min = Image::FILTER_LINEAR;
|
f.min = Image::FILTER_LINEAR;
|
||||||
|
f.mipmap = Image::FILTER_NONE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user