X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Frendertarget.cpp;h=7b603252b6e1c97f0b80ad953734147e6c8efcc2;hb=11266e8093e56524a68de1d0a08d275de95c56a0;hp=1349944b862ff969f6347d5ca070696bb597f09b;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/render/rendertarget.cpp b/source/render/rendertarget.cpp index 1349944b..7b603252 100644 --- a/source/render/rendertarget.cpp +++ b/source/render/rendertarget.cpp @@ -1,4 +1,5 @@ #include +#include #include "error.h" #include "renderbuffer.h" #include "rendertarget.h" @@ -35,23 +36,32 @@ RenderTargetFormat RenderTargetFormat::operator,(PixelFormat f) const throw invalid_operation("RenderTargetFormat::operator,"); PixelComponents comp = get_components(f); - unsigned size = get_component_size(f); + DataType type = get_component_type(f); + unsigned size = 0; unsigned char out = outputs[count-1]; if(get_output_type(out)>=get_output_type(RENDER_DEPTH)) { if(comp!=DEPTH_COMPONENT) throw invalid_argument("RenderTargetFormat::operator,"); - if(size>1) - --size; - if(get_component_type(f)==UNSIGNED_INT) - --size; + switch(type) + { + case UNSIGNED_SHORT: size = 0; break; + case UNSIGNED_INT: size = 2; break; + case FLOAT: size = 3; break; + default: throw invalid_argument("RenderTargetFormat::operator,"); + } } else { if(comp!=RED && comp!=RG && comp!=RGB && comp!=RGBA) throw invalid_argument("RenderTargetformat::operator,"); - if(size>3) - --size; + switch(type) + { + case UNSIGNED_BYTE: size = 0; break; + case HALF_FLOAT: size = 2; break; + case FLOAT: size = 3; break; + default: throw invalid_argument("RenderTargetFormat::operator,"); + } } out = (out&~15) | (size<<2) | (get_component_count(f)-1); @@ -193,5 +203,30 @@ 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 + fbo.set_debug_name(name+" [FBO]"); + unsigned i = 0; + for(const unsigned char *j=format.begin(); j!=format.end(); ++i, ++j) + { + unsigned type = get_output_type(*j); + + string buf_name; + if(type>=get_output_type(RENDER_DEPTH)) + buf_name = name+"/depth"; + else + buf_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"); + } +#else + (void)name; +#endif +} + } // namespace GL } // namespace Msp