Add framebuffer filter modes (issue #112)

This commit is contained in:
vrld
2011-01-01 19:42:59 +01:00
parent 618d48ce39
commit 9dad948263
4 changed files with 75 additions and 2 deletions
+30 -1
View File
@@ -282,15 +282,44 @@ namespace opengl
return img;
}
void Framebuffer::setFilter(Image::Filter f)
{
GLint gmin = (f.min == Image::FILTER_NEAREST) ? GL_NEAREST : GL_LINEAR;
GLint gmag = (f.mag == Image::FILTER_NEAREST) ? GL_NEAREST : GL_LINEAR;
glBindTexture(GL_TEXTURE_2D, img);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gmin);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gmag);
}
Image::Filter Framebuffer::getFilter() const
{
GLint gmin, gmag;
glBindTexture(GL_TEXTURE_2D, img);
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &gmin);
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &gmag);
Image::Filter f;
f.min = (gmin == GL_NEAREST) ? Image::FILTER_NEAREST : Image::FILTER_LINEAR;
f.mag = (gmag == GL_NEAREST) ? Image::FILTER_NEAREST : Image::FILTER_LINEAR;
return f;
}
bool Framebuffer::loadVolatile()
{
status = strategy->createFBO(fbo, depthbuffer, img, width, height);
if (status == GL_FRAMEBUFFER_COMPLETE)
setFilter(settings.filter);
return (status == GL_FRAMEBUFFER_COMPLETE);
}
void Framebuffer::unloadVolatile()
{
settings.filter = getFilter();
strategy->deleteFBO(fbo, depthbuffer, img);
}