-#include "deviceinfo.h"
#include "error.h"
#include "frameformat.h"
namespace Msp {
namespace GL {
-FrameFormat::FrameFormat():
- count(0),
- samples(1)
-{ }
-
FrameFormat::FrameFormat(FrameAttachment fa):
count(1),
samples(1)
throw invalid_operation("FrameFormat::operator,");
FrameFormat r = *this;
- UInt16 &fa = r.attachments[r.count-1];
- fa = make_typed_attachment(static_cast<FrameAttachment>(fa), pf);
+ FrameAttachment &fa = r.attachments[r.count-1];
+ fa = make_typed_attachment(fa, pf);
return r;
}
throw invalid_operation("FrameFormat::operator,");
FrameFormat r = *this;
- UInt16 &fa = r.attachments[r.count-1];
- fa = make_indexed_attachment(static_cast<FrameAttachment>(fa), index);
+ FrameAttachment &fa = r.attachments[r.count-1];
+ fa = make_indexed_attachment(fa, index);
return r;
}
}
else
{
- if(comp!=RED && comp!=RG && comp!=RGB && comp!=RGBA)
+ if(comp!=RED && comp!=RG && comp!=RGB && comp!=RGBA && comp!=BGR && comp!=BGRA)
+ throw invalid_argument("make_typed_attachment");
+ if(get_required_swizzle(comp))
throw invalid_argument("make_typed_attachment");
}
DataType type = get_component_type(pf);
- return static_cast<FrameAttachment>((fa&0xFC00) | (is_float(type)*0x80) | get_type_size(type)<<4 | get_component_count(comp));
+ return static_cast<FrameAttachment>((fa&0xFC00) | (is_float(type)*0x100) | get_type_size(type)<<4 | ((comp&0x20)>>2) | get_component_count(comp));
}
FrameAttachment make_indexed_attachment(FrameAttachment fa, unsigned i)
throw invalid_argument("make_indexed_attachment");
}
-PixelFormat get_attachment_pixelformat(UInt16 fa)
+PixelFormat get_attachment_pixelformat(FrameAttachment fa)
{
PixelComponents comp;
if(get_attach_point(fa)==get_attach_point(DEPTH_ATTACHMENT))
else if(get_attach_point(fa)==get_attach_point(STENCIL_ATTACHMENT))
comp = STENCIL_INDEX;
else
- comp = static_cast<PixelComponents>(fa&7);
+ comp = static_cast<PixelComponents>((fa&7) | (fa&8)<<2);
DataType type;
- if(fa&0x80)
+ if(fa&0x100)
type = static_cast<DataType>((fa&0x70)>>4 | 0x300);
else
type = static_cast<DataType>((fa&0x70)>>4);
return make_pixelformat(comp, type);
}
-GLenum get_gl_attachment(FrameAttachment fa)
-{
- if(get_attach_point(fa)==get_attach_point(DEPTH_ATTACHMENT))
- return GL_DEPTH_ATTACHMENT;
- else if(get_attach_point(fa)==get_attach_point(STENCIL_ATTACHMENT))
- return GL_STENCIL_ATTACHMENT;
- else
- return GL_COLOR_ATTACHMENT0+get_attach_point(fa);
-}
-
} // namespace GL
} // namespace Msp