|
From: Lasse Kärkkäi. <tr...@us...> - 2011-02-05 23:12:44
|
Module: performous
Branch: opengl2
Commit: baaf59b8a5247cacaff173de8b04712772b761f4
Author: Lasse Karkkainen <tro...@tr...>
Date: Sun Feb 6 00:12:02 2011 +0100
Huge performance improvement (for Nvidia) by not generating mipmaps for FBO.
---
game/fbo.hh | 14 ++++----------
game/video_driver.cc | 3 +--
2 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/game/fbo.hh b/game/fbo.hh
index 77a58d2..f511a99 100644
--- a/game/fbo.hh
+++ b/game/fbo.hh
@@ -11,19 +11,13 @@ class FBO: public boost::noncopyable {
FBO(): m_texture() {
{
UseTexture tex(m_texture);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, screenW(), screenH(), 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
- // When texture area is large, bilinear filter the original
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- // The texture wraps over at the edges (repeat)
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA, screenW(), screenH(), 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
}
// Create FBO
glGenFramebuffersEXT(1, &m_fbo);
// Bind texture as COLOR_ATTACHMENT0
bind();
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_texture.id(), 0);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE, m_texture.id(), 0);
unbind();
}
/// Handle clean-up
@@ -31,7 +25,7 @@ class FBO: public boost::noncopyable {
if (m_fbo) glDeleteFramebuffersEXT(1, &m_fbo);
}
/// Returns a reference to the attached texture
- OpenGLTexture<GL_TEXTURE_2D>& getTexture() {
+ OpenGLTexture<GL_TEXTURE_RECTANGLE>& getTexture() {
return m_texture;
}
/// Bind the FBO into use
@@ -45,7 +39,7 @@ class FBO: public boost::noncopyable {
private:
GLuint m_fbo;
- OpenGLTexture<GL_TEXTURE_2D> m_texture;
+ OpenGLTexture<GL_TEXTURE_RECTANGLE> m_texture;
};
/// RAII FBO binder
diff --git a/game/video_driver.cc b/game/video_driver.cc
index 337c939..97da256 100644
--- a/game/video_driver.cc
+++ b/game/video_driver.cc
@@ -132,8 +132,7 @@ void Window::render(boost::function<void (void)> drawFunc) {
}
{
UseTexture use(fbo[num].getTexture());
- glGenerateMipmap(GL_TEXTURE_2D);
- fbo[num].getTexture().draw(Dimensions().stretch(1.0, virtH()), TexCoords(0.0, 1.0, 1.0, 0.0));
+ fbo[num].getTexture().draw(Dimensions().stretch(1.0, virtH()), TexCoords(0.0, screenH(), screenW(), 0.0));
}
}
}
|