#include <msp/core/maputils.h>
+#include <msp/strings/format.h>
#include "error.h"
#include "renderbuffer.h"
#include "rendertarget.h"
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);
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