Framebuffer::Framebuffer(bool s):
- FramebufferBackend(s),
- dirty(0)
-{
- if(s)
- {
- format = get_system_format();
- get_system_size(width, height);
- }
-}
+ 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);
}
}
}
}
}
-void Framebuffer::resize(const WindowView &view)
+const Texture *Framebuffer::get_attachment(FrameAttachment attch) const
{
if(attachments.empty())
- throw invalid_operation("Framebuffer::resize");
+ return 0;
+
+ int i = format.index(attch);
+ return (i>=0 ? attachments[i].tex : 0);
+}
- width = view.get_width();
- height = view.get_height();
+const Texture *Framebuffer::get_attachment(unsigned i) const
+{
+ return (i<attachments.size() ? attachments[i].tex : 0);
}
void Framebuffer::require_complete() const
FramebufferBackend::require_complete();
}
-Framebuffer &Framebuffer::system()
-{
- static Framebuffer sys_framebuf(true);
- return sys_framebuf;
-}
-
void Framebuffer::Attachment::set(Texture &t, unsigned l, int z)
{