]> git.tdb.fi Git - libs/gl.git/blobdiff - source/postprocessor.cpp
Remove the deprecated ProgramBuilder class
[libs/gl.git] / source / postprocessor.cpp
index 6c9408cb00db48772d361bfa8b5754338ea00c30..6af069e97df613c76fda5a4ed8399b88c4e69b87 100644 (file)
@@ -1,47 +1,75 @@
 #include "mesh.h"
 #include "meshbuilder.h"
 #include "postprocessor.h"
+#include "sampler.h"
 #include "shader.h"
 
-namespace {
+namespace Msp {
+namespace GL {
 
-const char fullscreen_vs_source[] =
-       "varying vec2 texcoord;\n"
-       "void main()\n"
-       "{\n"
-       "       gl_Position = gl_Vertex;\n"
-       "       texcoord = gl_Vertex.xy*0.5+0.5;\n"
-       "}\n";
+WeakPtr<Mesh> PostProcessor::fullscreen_quad;
+WeakPtr<Sampler> PostProcessor::nearest_sampler;
+WeakPtr<Sampler> PostProcessor::linear_sampler;
 
+void PostProcessor::render(Renderer &, const Texture2D &color, const Texture2D &depth)
+{
+       render(color, depth);
 }
 
+RefPtr<Mesh> PostProcessor::get_fullscreen_quad()
+{
+       RefPtr<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;
+}
 
-namespace Msp {
-namespace GL {
-
-Shader &PostProcessor::get_fullscreen_vertex_shader()
+RefPtr<Sampler> PostProcessor::get_nearest_sampler()
 {
-       static VertexShader shader(fullscreen_vs_source);
-       return shader;
+       RefPtr<Sampler> sampler = nearest_sampler;
+       if(!sampler)
+       {
+               sampler = new Sampler;
+               sampler->set_filter(NEAREST);
+               sampler->set_wrap(CLAMP_TO_EDGE);
+               nearest_sampler = sampler;
+       }
+       return sampler;
 }
 
-const Mesh &PostProcessor::get_fullscreen_quad()
+RefPtr<Sampler> PostProcessor::get_linear_sampler()
 {
-       static const Mesh &mesh = create_fullscreen_quad();
-       return mesh;
+       RefPtr<Sampler> sampler = linear_sampler;
+       if(!sampler)
+       {
+               sampler = new Sampler;
+               sampler->set_filter(LINEAR);
+               sampler->set_wrap(CLAMP_TO_EDGE);
+               linear_sampler = sampler;
+       }
+       return sampler;
 }
 
-const Mesh &PostProcessor::create_fullscreen_quad()
+
+PostProcessor::Template::Template():
+       size_divisor(1)
+{ }
+
+
+PostProcessor::Template::Loader::Loader(Template &t):
+       DataFile::ObjectLoader<Template>(t)
 {
-       static Mesh mesh(GL::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();
-       return mesh;
+       add("size_divisor", &Template::size_divisor);
 }
 
 } // namespace GL