|
@@ -282,15 +282,44 @@ namespace opengl
|
|
|
|
|
|
return img;
|
|
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()
|
|
bool Framebuffer::loadVolatile()
|
|
{
|
|
{
|
|
status = strategy->createFBO(fbo, depthbuffer, img, width, height);
|
|
status = strategy->createFBO(fbo, depthbuffer, img, width, height);
|
|
|
|
+ if (status == GL_FRAMEBUFFER_COMPLETE)
|
|
|
|
+ setFilter(settings.filter);
|
|
|
|
+
|
|
return (status == GL_FRAMEBUFFER_COMPLETE);
|
|
return (status == GL_FRAMEBUFFER_COMPLETE);
|
|
}
|
|
}
|
|
|
|
|
|
void Framebuffer::unloadVolatile()
|
|
void Framebuffer::unloadVolatile()
|
|
{
|
|
{
|
|
|
|
+ settings.filter = getFilter();
|
|
strategy->deleteFBO(fbo, depthbuffer, img);
|
|
strategy->deleteFBO(fbo, depthbuffer, img);
|
|
}
|
|
}
|
|
|
|
|