Debug("View Created - Bounds => {%s}", m_bounds.Str().c_str());
// Create ObjectRenderers - new's match delete's in View::~View
- // Ok, look, this may seem disgusting, but go look at View::PrepareRender before you murder me
+ //TODO: Don't forget to put new renderers here or things will be segfaultastic
m_object_renderers[RECT_FILLED] = new RectFilledRenderer();
m_object_renderers[RECT_OUTLINE] = new RectOutlineRenderer();
m_object_renderers[CIRCLE_FILLED] = new CircleFilledRenderer();
+ m_object_renderers[BEZIER] = new BezierRenderer();
// To add rendering for a new type of object;
// 1. Add enum to ObjectType in ipdf.h
{
for (unsigned i = 0; i < m_object_renderers.size(); ++i)
{
- delete m_object_renderers[i];
+ delete m_object_renderers[i]; // delete's match new's in constructor
}
m_object_renderers.clear();
delete [] m_cpu_rendering_pixels;
m_bounds.y = y - top;
m_bounds.w *= scale_amount;
m_bounds.h *= scale_amount;
- Debug("View Bounds => %s", m_bounds.Str().c_str());
+ //Debug("Scale at {%s, %s} by %s View Bounds => %s", x.Str().c_str(), y.Str().c_str(), scale_amount.Str().c_str(), m_bounds.Str().c_str());
if (!m_use_gpu_transform)
m_buffer_dirty = true;
m_bounds_dirty = true;
if (m_use_gpu_transform)
{
- GLfloat glbounds[] = {static_cast<GLfloat>(Float(m_bounds.x)), static_cast<GLfloat>(Float(m_bounds.y)), static_cast<GLfloat>(Float(m_bounds.w)), static_cast<GLfloat>(Float(m_bounds.h))};
- m_bounds_ubo.Upload(sizeof(float)*4, glbounds);
+ GLfloat glbounds[] = {static_cast<GLfloat>(Float(m_bounds.x)), static_cast<GLfloat>(Float(m_bounds.y)), static_cast<GLfloat>(Float(m_bounds.w)), static_cast<GLfloat>(Float(m_bounds.h)),
+ 0.0, 0.0, 640.0, 480.0};
+ m_bounds_ubo.Upload(sizeof(float)*8, glbounds);
}
else
{
- GLfloat glbounds[] = {0.0f, 0.0f, 1.0f, 1.0f};
- m_bounds_ubo.Upload(sizeof(float)*4, glbounds);
+ GLfloat glbounds[] = {0.0f, 0.0f, 1.0f, 1.0f,
+ 0.0f, 0.0f, 640.0f, 480.0f};
+ m_bounds_ubo.Upload(sizeof(float)*8, glbounds);
}
m_bounds_dirty = false;
void View::UpdateObjBoundsVBO()
{
- Debug("Called");
m_objbounds_vbo.Invalidate();
m_objbounds_vbo.SetType(GraphicsBuffer::BufferTypeVertex);
if (m_use_gpu_transform)
*/
void View::PrepareRender()
{
+ Debug("Recreate buffers with %u objects", m_document.ObjectCount());
// Prepare bounds vbo
+ m_bounds_ubo.Invalidate();
m_bounds_ubo.SetType(GraphicsBuffer::BufferTypeUniform);
m_bounds_ubo.SetUsage(GraphicsBuffer::BufferUsageStreamDraw);
ObjectType type = m_document.m_objects.types[id];
m_object_renderers.at(type)->AddObjectToBuffers(id); // Use at() in case the document is corrupt TODO: Better error handling?
// (Also, Wow I just actually used std::vector::at())
+ // (Also, I just managed to make it throw an exception because I'm a moron)
+ Debug("Object of type %d", type);
}
// Finish the buffers
for (unsigned i = 0; i < m_object_renderers.size(); ++i)
{
m_object_renderers[i]->FinaliseBuffers();
- }
+ }
+ dynamic_cast<BezierRenderer*>(m_object_renderers[BEZIER])->PrepareBezierGPUBuffer(m_document.m_objects);
m_render_dirty = false;
}