X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Frendertarget.cpp;h=426b2d5257d0ccebb770242f989ef75c45f38283;hb=cd5f37b066352119cf92d53d0001af7ff99be437;hp=7b603252b6e1c97f0b80ad953734147e6c8efcc2;hpb=1863f17c5c5563be8492d7f01e5c613a740ea1e9;p=libs%2Fgl.git diff --git a/source/render/rendertarget.cpp b/source/render/rendertarget.cpp index 7b603252..426b2d52 100644 --- a/source/render/rendertarget.cpp +++ b/source/render/rendertarget.cpp @@ -1,8 +1,9 @@ #include #include #include "error.h" -#include "renderbuffer.h" #include "rendertarget.h" +#include "texture2d.h" +#include "texture2dmultisample.h" using namespace std; @@ -137,56 +138,37 @@ void RenderTarget::init(unsigned w, unsigned h, unsigned s, const RenderTargetFo PixelFormat pf = get_output_pixelformat(*i); - TargetBuffer tgt; if(samples) { - tgt.buffer = new Renderbuffer; - tgt.buffer->storage_multisample(samples, pf, width, height); - fbo.attach(att, *tgt.buffer); + Texture2DMultisample *tex2d_ms = new Texture2DMultisample; + tex2d_ms->storage(pf, width, height, samples); + fbo.attach(att, *tex2d_ms); + textures.push_back(tex2d_ms); } else { - tgt.texture = new Texture2D; - tgt.texture->storage(pf, width, height, 1); - Sampler &sampler = tgt.texture->get_default_sampler(); - sampler.set_filter(NEAREST); - sampler.set_wrap(CLAMP_TO_EDGE); - fbo.attach(att, *tgt.texture); + Texture2D *tex2d = new Texture2D; + tex2d->storage(pf, width, height, 1); + fbo.attach(att, *tex2d); + textures.push_back(tex2d); } - buffers.push_back(tgt); } - - fbo.require_complete(); } RenderTarget::~RenderTarget() { - for(vector::iterator i=buffers.begin(); i!=buffers.end(); ++i) - { - if(samples) - delete i->buffer; - else - delete i->texture; - } -} - -void RenderTarget::set_texture_filter(TextureFilter filt) -{ - if(!samples) - { - for(vector::iterator i=buffers.begin(); i!=buffers.end(); ++i) - i->texture->get_default_sampler().set_filter(filt); - } + for(vector::iterator i=textures.begin(); i!=textures.end(); ++i) + delete *i; } const Texture2D &RenderTarget::get_target_texture(unsigned i) const { - if(i>=buffers.size()) + if(i>=textures.size()) throw out_of_range("RenderTarget::get_target_texture"); if(samples) throw invalid_operation("RenderTarget::get_target_texture"); - return *buffers[i].texture; + return *static_cast(textures[i]); } const Texture2D &RenderTarget::get_target_texture(RenderOutput o) const @@ -198,11 +180,6 @@ const Texture2D &RenderTarget::get_target_texture(RenderOutput o) const return get_target_texture(index); } -void RenderTarget::blit_from(const RenderTarget &other) -{ - fbo.blit_from(other.fbo, COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT, false); -} - void RenderTarget::set_debug_name(const string &name) { #ifdef DEBUG @@ -212,16 +189,13 @@ void RenderTarget::set_debug_name(const string &name) { unsigned type = get_output_type(*j); - string buf_name; + string tex_name; if(type>=get_output_type(RENDER_DEPTH)) - buf_name = name+"/depth"; + tex_name = name+"/depth"; else - buf_name = Msp::format("%s/color%d", name, type); + tex_name = Msp::format("%s/color%d", name, type); - if(samples) - buffers[i].buffer->set_debug_name(buf_name+".tex2d"); - else - buffers[i].texture->set_debug_name(buf_name+".rbuf"); + textures[i]->set_debug_name(tex_name+".tex2d"); } #else (void)name;