]> git.tdb.fi Git - libs/gl.git/blobdiff - source/postprocessor.cpp
Better lifecycle management of the fullscreen quad in PostProcessor
[libs/gl.git] / source / postprocessor.cpp
index 28ae71b0945b2ca28e04cf3de34d60e222a36646..ffc753e4b11ed658280b647e05af688ccec0039b 100644 (file)
@@ -3,50 +3,32 @@
 #include "postprocessor.h"
 #include "shader.h"
 
-namespace {
-
-const char fullscreen_vs_source[] =
-       "attribute vec4 vertex;\n"
-       "varying vec2 texcoord;\n"
-       "void main()\n"
-       "{\n"
-       "       gl_Position = vertex;\n"
-       "       texcoord = vertex.xy*0.5+0.5;\n"
-       "}\n";
-
-}
-
-
 namespace Msp {
 namespace GL {
 
+WeakPtr<Mesh> PostProcessor::fullscreen_quad;
+
 void PostProcessor::render(Renderer &, const Texture2D &color, const Texture2D &depth)
 {
        render(color, depth);
 }
 
-Shader &PostProcessor::get_fullscreen_vertex_shader()
-{
-       static VertexShader shader(fullscreen_vs_source);
-       return shader;
-}
-
-const Mesh &PostProcessor::get_fullscreen_quad()
-{
-       static const Mesh &mesh = create_fullscreen_quad();
-       return mesh;
-}
-
-const Mesh &PostProcessor::create_fullscreen_quad()
+RefPtr<Mesh> PostProcessor::get_fullscreen_quad()
 {
-       static Mesh mesh(VERTEX2);
-       MeshBuilder builder(mesh);
-       builder.begin(TRIANGLE_STRIP);
-       builder.vertex(-1, 1);
-       builder.vertex(-1, -1);
-       builder.vertex(1, 1);
-       builder.vertex(1, -1);
-       builder.end();
+       RefPtr<Mesh> mesh;
+       mesh = fullscreen_quad;
+       if(!mesh)
+       {
+               mesh = new Mesh(VERTEX2);
+               MeshBuilder builder(*mesh);
+               builder.begin(TRIANGLE_STRIP);
+               builder.vertex(-1, 1);
+               builder.vertex(-1, -1);
+               builder.vertex(1, 1);
+               builder.vertex(1, -1);
+               builder.end();
+               fullscreen_quad = mesh;
+       }
        return mesh;
 }