git.ucc.asn.au
/
ipdf
/
code.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
QuadTree should segfault less frequently.
[ipdf/code.git]
/
src
/
objectrenderer.cpp
diff --git
a/src/objectrenderer.cpp
b/src/objectrenderer.cpp
index
9bbcfd6
..
8b3b7e4
100644
(file)
--- a/
src/objectrenderer.cpp
+++ b/
src/objectrenderer.cpp
@@
-31,10
+31,14
@@
ObjectRenderer::ObjectRenderer(const ObjectType & type,
*/
void ObjectRenderer::RenderUsingGPU(unsigned first_obj_id, unsigned last_obj_id)
{
*/
void ObjectRenderer::RenderUsingGPU(unsigned first_obj_id, unsigned last_obj_id)
{
+ // 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;
unsigned first_index = 0;
unsigned first_index = 0;
- while (m_indexes[first_index] < first_obj_id) first_index ++;
+ while (m_indexes
.size() > first_index && m_indexes
[first_index] < first_obj_id) first_index ++;
unsigned last_index = first_index;
unsigned last_index = first_index;
- while (m_indexes[last_index] < last_obj_id) last_index ++;
+ while (m_indexes
.size() > last_index && m_indexes
[last_index] < last_obj_id) last_index ++;
m_shader_program.Use();
m_ibo.Bind();
m_shader_program.Use();
m_ibo.Bind();
@@
-277,8
+281,8
@@
void BezierRenderer::PrepareBezierGPUBuffer(const Objects& objects)
{
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
)
};
builder.Add(coeffs);
}
};
builder.Add(coeffs);
}
@@
-303,10
+307,15
@@
void BezierRenderer::RenderUsingGPU(unsigned first_obj_id, unsigned last_obj_id)
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;
+
unsigned first_index = 0;
unsigned first_index = 0;
- while (m_indexes[first_index] < first_obj_id) first_index ++;
+ while (m_indexes
.size() > first_index && m_indexes
[first_index] < first_obj_id) first_index ++;
unsigned last_index = first_index;
unsigned last_index = first_index;
- while (m_indexes[last_index] < last_obj_id) last_index ++;
+ while (m_indexes
.size() > last_index && m_indexes
[last_index] < last_obj_id) last_index ++;
m_shader_program.Use();
glUniform1i(m_shader_program.GetUniformLocation("bezier_buffer_texture"), 0);
m_shader_program.Use();
glUniform1i(m_shader_program.GetUniformLocation("bezier_buffer_texture"), 0);
UCC
git Repository :: git.ucc.asn.au