+ // If we don't have anything to render, return.
+ if (first_obj_id == last_obj_id) return;
+ // If there are no objects of this type, return.
+ if (m_indexes.empty()) return;
- glDrawElements(GL_LINES, (last_index-first_index)*2, GL_UNSIGNED_INT, (GLvoid*)(first_index*sizeof(uint32_t)));
+ glDrawElements(GL_LINES, (last_index-first_index)*2, GL_UNSIGNED_INT, (GLvoid*)(2*first_index*sizeof(uint32_t)));
m_ibo.Invalidate();
m_ibo.SetUsage(GraphicsBuffer::BufferUsageStaticDraw);
m_ibo.SetType(GraphicsBuffer::BufferTypeIndex);
m_ibo.Invalidate();
m_ibo.SetUsage(GraphicsBuffer::BufferUsageStaticDraw);
m_ibo.SetType(GraphicsBuffer::BufferTypeIndex);
m_ibo.Resize(max_objects * 2 * sizeof(uint32_t));
// BufferBuilder is used to construct the ibo
m_buffer_builder = new BufferBuilder<uint32_t>(m_ibo.Map(false, true, true), m_ibo.GetSize()); // new matches delete in ObjectRenderer::FinaliseBuffers
m_ibo.Resize(max_objects * 2 * sizeof(uint32_t));
// BufferBuilder is used to construct the ibo
m_buffer_builder = new BufferBuilder<uint32_t>(m_ibo.Map(false, true, true), m_ibo.GetSize()); // new matches delete in ObjectRenderer::FinaliseBuffers
if (m_indexes[i] < first_obj_id) continue;
if (m_indexes[i] >= last_obj_id) continue;
PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
if (m_indexes[i] < first_obj_id) continue;
if (m_indexes[i] >= last_obj_id) continue;
PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
//Debug("Centre is %d, %d", centre_x, centre_y);
//Debug("Bounds are %d,%d,%d,%d", bounds.x, bounds.y, bounds.w, bounds.h);
//Debug("Windos is %d,%d", target.w, target.h);
//Debug("Centre is %d, %d", centre_x, centre_y);
//Debug("Bounds are %d,%d,%d,%d", bounds.x, bounds.y, bounds.w, bounds.h);
//Debug("Windos is %d,%d", target.w, target.h);
- double dx = 2.0*(double)(x - centre_x)/(double)(bounds.w);
- double dy = 2.0*(double)(y - centre_y)/(double)(bounds.h);
+ Real dx(2); dx *= Real(x - centre_x)/Real(bounds.w);
+ Real dy(2); dy *= Real(y - centre_y)/Real(bounds.h);
{
target.pixels[index+0] = 0;
target.pixels[index+1] = 0;
target.pixels[index+2] = 0;
target.pixels[index+3] = 255;
{
target.pixels[index+0] = 0;
target.pixels[index+1] = 0;
target.pixels[index+2] = 0;
target.pixels[index+3] = 255;
- int64_t blen = max(2L, min(100L, pix_bounds.w));
+ //Debug("target is (%lu, %lu)", target.w, target.h);
+ int64_t blen = 100;
+ //blen = min(max((int64_t)2, (int64_t)(target.w/view.GetBounds().w)), (int64_t)100);
+
- Debug("Using %li lines, inverse %f", blen, Double(invblen));
+ //Debug("Using %li lines, inverse %f", blen, Double(invblen));
for (int64_t j = 1; j <= blen; ++j)
{
control.Evaluate(x[j % 2],y[j % 2], invblen*j);
for (int64_t j = 1; j <= blen; ++j)
{
control.Evaluate(x[j % 2],y[j % 2], invblen*j);
{
m_bezier_coeffs.SetType(GraphicsBuffer::BufferTypeTexture);
m_bezier_coeffs.SetUsage(GraphicsBuffer::BufferUsageDynamicDraw);
{
m_bezier_coeffs.SetType(GraphicsBuffer::BufferTypeTexture);
m_bezier_coeffs.SetUsage(GraphicsBuffer::BufferUsageDynamicDraw);
m_bezier_coeffs.Resize(objects.beziers.size()*sizeof(GPUBezierCoeffs));
BufferBuilder<GPUBezierCoeffs> builder(m_bezier_coeffs.Map(false, true, true), m_bezier_coeffs.GetSize());
m_bezier_coeffs.Resize(objects.beziers.size()*sizeof(GPUBezierCoeffs));
BufferBuilder<GPUBezierCoeffs> builder(m_bezier_coeffs.Map(false, true, true), m_bezier_coeffs.GetSize());
{
GPUBezierCoeffs coeffs = {
Float(bez->x0), Float(bez->y0),
{
GPUBezierCoeffs coeffs = {
Float(bez->x0), Float(bez->y0),
- Float(bez->x1 - bez->x0), Float(bez->y1 - bez->y0),
- Float(bez->x2 - bez->x0), Float(bez->y2 - bez->y0)
+ Float(bez->x1), Float(bez->y1),
+ Float(bez->x2), Float(bez->y2),
+ Float(bez->x3), Float(bez->y3)
m_bezier_ids.SetType(GraphicsBuffer::BufferTypeTexture);
m_bezier_ids.SetUsage(GraphicsBuffer::BufferUsageDynamicDraw);
m_bezier_ids.SetType(GraphicsBuffer::BufferTypeTexture);
m_bezier_ids.SetUsage(GraphicsBuffer::BufferUsageDynamicDraw);
m_bezier_ids.Upload(objects.data_indices.size() * sizeof(uint32_t), &objects.data_indices[0]);
glGenTextures(1, &m_bezier_id_buffer_texture);
m_bezier_ids.Upload(objects.data_indices.size() * sizeof(uint32_t), &objects.data_indices[0]);
glGenTextures(1, &m_bezier_id_buffer_texture);
if (!m_shader_program.Valid())
Warn("Shader is invalid (objects are of type %d)", m_type);
if (!m_shader_program.Valid())
Warn("Shader is invalid (objects are of type %d)", m_type);
+ // If we don't have anything to render, return.
+ if (first_obj_id == last_obj_id) return;
+ // If there are no objects of this type, return.
+ if (m_indexes.empty()) return;
+
m_shader_program.Use();
glUniform1i(m_shader_program.GetUniformLocation("bezier_buffer_texture"), 0);
glUniform1i(m_shader_program.GetUniformLocation("bezier_id_buffer_texture"), 1);
m_ibo.Bind();
m_shader_program.Use();
glUniform1i(m_shader_program.GetUniformLocation("bezier_buffer_texture"), 0);
glUniform1i(m_shader_program.GetUniformLocation("bezier_id_buffer_texture"), 1);
m_ibo.Bind();
- glDrawElements(GL_LINES, (last_index-first_index)*2, GL_UNSIGNED_INT, (GLvoid*)(first_index*sizeof(uint32_t)));
+ glDrawElements(GL_LINES, (last_index-first_index)*2, GL_UNSIGNED_INT, (GLvoid*)(2*first_index*sizeof(uint32_t)));