Framebuffer::Framebuffer(bool s):
- FramebufferBackend(s),
- dirty(0)
+ FramebufferBackend(s)
{ }
Framebuffer::Framebuffer():
- FramebufferBackend(false),
- width(0),
- height(0),
- dirty(0)
+ FramebufferBackend(false)
{ }
Framebuffer::Framebuffer(FrameAttachment fa):
{
unsigned w = 0;
unsigned h = 0;
+ unsigned l = 1;
if(const Texture2D *tex2d = dynamic_cast<const Texture2D *>(a.tex))
{
w = max(tex2d->get_width()>>a.level, 1U);
{
w = max(tex3d->get_width()>>a.level, 1U);
h = max(tex3d->get_height()>>a.level, 1U);
+ l = (a.layer<0 ? tex3d->get_depth() : 1);
}
else if(const TextureCube *tex_cube = dynamic_cast<const TextureCube *>(a.tex))
{
w = max(tex_cube->get_size()>>a.level, 1U);
h = w;
+ l = (a.layer<0 ? 6 : 1);
}
if(first)
{
width = w;
height = h;
+ layers = l;
first = false;
}
else
{
width = min(width, w);
height = min(height, h);
+ layers = min(layers, l);
}
}
}
}
}
+const Texture *Framebuffer::get_attachment(FrameAttachment attch) const
+{
+ if(attachments.empty())
+ return 0;
+
+ int i = format.index(attch);
+ return (i>=0 ? attachments[i].tex : 0);
+}
+
+const Texture *Framebuffer::get_attachment(unsigned i) const
+{
+ return (i<attachments.size() ? attachments[i].tex : 0);
+}
+
void Framebuffer::require_complete() const
{
bool layered = (!attachments.empty() && attachments.front().layer<0);