]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/rendertarget.cpp
Add debug name capability to more classes
[libs/gl.git] / source / render / rendertarget.cpp
index 1349944b862ff969f6347d5ca070696bb597f09b..7b603252b6e1c97f0b80ad953734147e6c8efcc2 100644 (file)
@@ -1,4 +1,5 @@
 #include <msp/core/maputils.h>
+#include <msp/strings/format.h>
 #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