calls so that they take a number of vertices or indexes, not elements.legacy
@@ -125,7 +125,7 @@ void EasyMesh::Render(mat4 const &model, float damage) | |||||
m_gpu.ibo->Bind(); | m_gpu.ibo->Bind(); | ||||
m_gpu.vdecl->DrawIndexedElements(MeshPrimitive::Triangles, | m_gpu.vdecl->DrawIndexedElements(MeshPrimitive::Triangles, | ||||
0, 0, m_gpu.vertexcount, | 0, 0, m_gpu.vertexcount, | ||||
0, m_gpu.indexcount / 3); | |||||
0, m_gpu.indexcount); | |||||
m_gpu.ibo->Unbind(); | m_gpu.ibo->Unbind(); | ||||
m_gpu.vdecl->Unbind(); | m_gpu.vdecl->Unbind(); | ||||
} | } | ||||
@@ -135,11 +135,23 @@ void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count) | |||||
switch (type) | switch (type) | ||||
{ | { | ||||
case MeshPrimitive::Triangles: | case MeshPrimitive::Triangles: | ||||
if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, skip, count))) | |||||
if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, | |||||
skip, count))) | |||||
Abort(); | |||||
break; | |||||
case MeshPrimitive::TriangleStrips: | |||||
if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, | |||||
skip, count))) | |||||
Abort(); | |||||
break; | |||||
case MeshPrimitive::TriangleFans: | |||||
if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | |||||
skip, count))) | |||||
Abort(); | Abort(); | ||||
break; | break; | ||||
case MeshPrimitive::Points: | case MeshPrimitive::Points: | ||||
if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_POINTLIST, skip, count))) | |||||
if (FAILED(g_d3ddevice->DrawPrimitive(D3DPT_POINTLIST, | |||||
skip, count))) | |||||
Abort(); | Abort(); | ||||
break; | break; | ||||
} | } | ||||
@@ -157,7 +169,13 @@ void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count) | |||||
switch (type) | switch (type) | ||||
{ | { | ||||
case MeshPrimitive::Triangles: | case MeshPrimitive::Triangles: | ||||
glDrawArrays(GL_TRIANGLES, skip * 3, count * 3); | |||||
glDrawArrays(GL_TRIANGLES, skip, count); | |||||
break; | |||||
case MeshPrimitive::TriangleStrips: | |||||
glDrawArrays(GL_TRIANGLE_STRIP, skip, count); | |||||
break; | |||||
case MeshPrimitive::TriangleFans: | |||||
glDrawArrays(GL_TRIANGLE_FAN, skip, count); | |||||
break; | break; | ||||
case MeshPrimitive::Points: | case MeshPrimitive::Points: | ||||
glDrawArrays(GL_POINTS, skip, count); | glDrawArrays(GL_POINTS, skip, count); | ||||
@@ -185,11 +203,23 @@ void VertexDeclaration::DrawIndexedElements(MeshPrimitive type, int vbase, | |||||
switch (type) | switch (type) | ||||
{ | { | ||||
case MeshPrimitive::Triangles: | case MeshPrimitive::Triangles: | ||||
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, vbase, vskip, vcount, skip, count))) | |||||
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, | |||||
vbase, vskip, vcount, skip, count))) | |||||
Abort(); | |||||
break; | |||||
case MeshPrimitive::TriangleStrips: | |||||
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, | |||||
vbase, vskip, vcount, skip, count))) | |||||
Abort(); | |||||
break; | |||||
case MeshPrimitive::TriangleFans: | |||||
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_TRIANGLEFAN, | |||||
vbase, vskip, vcount, skip, count))) | |||||
Abort(); | Abort(); | ||||
break; | break; | ||||
case MeshPrimitive::Points: | case MeshPrimitive::Points: | ||||
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_POINTLIST, vbase, vskip, vcount, skip, count))) | |||||
if (FAILED(g_d3ddevice->DrawIndexedPrimitive(D3DPT_POINTLIST, | |||||
vbase, vskip, vcount, skip, count))) | |||||
Abort(); | Abort(); | ||||
break; | break; | ||||
} | } | ||||
@@ -209,7 +239,17 @@ void VertexDeclaration::DrawIndexedElements(MeshPrimitive type, int vbase, | |||||
case MeshPrimitive::Triangles: | case MeshPrimitive::Triangles: | ||||
/* FIXME: ignores most of the arguments! */ | /* FIXME: ignores most of the arguments! */ | ||||
(void)vbase; (void)vskip; (void)vcount; (void)skip; | (void)vbase; (void)vskip; (void)vcount; (void)skip; | ||||
glDrawElements(GL_TRIANGLES, count * 3, GL_UNSIGNED_SHORT, 0); | |||||
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, 0); | |||||
break; | |||||
case MeshPrimitive::TriangleStrips: | |||||
/* FIXME: ignores most of the arguments! */ | |||||
(void)vbase; (void)vskip; (void)vcount; (void)skip; | |||||
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, 0); | |||||
break; | |||||
case MeshPrimitive::TriangleFans: | |||||
/* FIXME: ignores most of the arguments! */ | |||||
(void)vbase; (void)vskip; (void)vcount; (void)skip; | |||||
glDrawElements(GL_TRIANGLE_FAN, count, GL_UNSIGNED_SHORT, 0); | |||||
break; | break; | ||||
case MeshPrimitive::Points: | case MeshPrimitive::Points: | ||||
/* FIXME: ignores most of the arguments! */ | /* FIXME: ignores most of the arguments! */ | ||||
@@ -72,6 +72,8 @@ struct MeshPrimitive | |||||
enum Value | enum Value | ||||
{ | { | ||||
Triangles, | Triangles, | ||||
TriangleStrips, | |||||
TriangleFans, | |||||
Points, | Points, | ||||
} | } | ||||
m_value; | m_value; | ||||
@@ -184,9 +186,16 @@ public: | |||||
~VertexDeclaration(); | ~VertexDeclaration(); | ||||
void Bind(); | void Bind(); | ||||
/* Draw elements. See MeshPrimitive for a list of all available | |||||
* types. Both skip and count are numbers of vertices, not primitives. */ | |||||
void DrawElements(MeshPrimitive type, int skip, int count); | void DrawElements(MeshPrimitive type, int skip, int count); | ||||
/* Draw elements. See MeshPrimitive for a list of all available | |||||
* types. Both skip and count are numbers of indices, not primitives. */ | |||||
void DrawIndexedElements(MeshPrimitive type, int vbase, int vskip, | void DrawIndexedElements(MeshPrimitive type, int vbase, int vskip, | ||||
int vcount, int skip, int count); | int vcount, int skip, int count); | ||||
void Unbind(); | void Unbind(); | ||||
void SetStream(VertexBuffer *vb, ShaderAttrib attr1, | void SetStream(VertexBuffer *vb, ShaderAttrib attr1, | ||||
ShaderAttrib attr2 = ShaderAttrib(), | ShaderAttrib attr2 = ShaderAttrib(), | ||||
@@ -117,7 +117,7 @@ void Gradient::TickDraw(float seconds) | |||||
data->m_vdecl->SetStream(data->m_cbo, attr_col); | data->m_vdecl->SetStream(data->m_cbo, attr_col); | ||||
/* Draw arrays */ | /* Draw arrays */ | ||||
data->m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||||
data->m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||||
} | } | ||||
Gradient::~Gradient() | Gradient::~Gradient() | ||||
@@ -255,7 +255,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
data->m_vdecl->SetStream(vb2, attr_tex); | data->m_vdecl->SetStream(vb2, attr_tex); | ||||
/* Draw arrays */ | /* Draw arrays */ | ||||
data->m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, (n - i) * 2); | |||||
data->m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, (n - i) * 6); | |||||
data->m_vdecl->Unbind(); | data->m_vdecl->Unbind(); | ||||
data->tiles[i].tileset->Unbind(); | data->tiles[i].tileset->Unbind(); | ||||
} | } | ||||
@@ -59,7 +59,7 @@ public: | |||||
m_shader->Bind(); | m_shader->Bind(); | ||||
m_vdecl->SetStream(m_vbo, m_coord); | m_vdecl->SetStream(m_vbo, m_coord); | ||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 1); | |||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 3); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
} | } | ||||
@@ -112,7 +112,7 @@ public: | |||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
m_ibo->Bind(); | m_ibo->Bind(); | ||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, 0, 0, | m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, 0, 0, | ||||
m_mesh.Count(), 0, m_indices.Count()); | |||||
m_mesh.Count(), 0, m_indices.Count() * 3); | |||||
m_ibo->Unbind(); | m_ibo->Unbind(); | ||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
} | } | ||||
@@ -68,7 +68,7 @@ public: | |||||
m_shader->SetUniform(m_time_uni, m_time); | m_shader->SetUniform(m_time_uni, m_time); | ||||
m_vdecl->SetStream(m_vbo, m_coord); | m_vdecl->SetStream(m_vbo, m_coord); | ||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
} | } | ||||
@@ -99,7 +99,7 @@ public: | |||||
m_shader->SetUniform(m_uni_texture, m_fbo->GetTexture(), 0); | m_shader->SetUniform(m_uni_texture, m_fbo->GetTexture(), 0); | ||||
m_vdecl->SetStream(m_vbo, m_coord); | m_vdecl->SetStream(m_vbo, m_coord); | ||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
#endif | #endif | ||||
@@ -108,7 +108,7 @@ public: | |||||
m_shader->SetUniform(m_uni_color, m_color); | m_shader->SetUniform(m_uni_color, m_color); | ||||
m_vdecl->SetStream(m_vbo, m_coord); | m_vdecl->SetStream(m_vbo, m_coord); | ||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
m_shader->Unbind(); | m_shader->Unbind(); | ||||
m_fbo->Unbind(); | m_fbo->Unbind(); | ||||
@@ -118,7 +118,7 @@ public: | |||||
m_shader->SetUniform(m_uni_texture, m_fbo->GetTexture(), 0); | m_shader->SetUniform(m_uni_texture, m_fbo->GetTexture(), 0); | ||||
m_vdecl->SetStream(m_vbo, m_coord); | m_vdecl->SetStream(m_vbo, m_coord); | ||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
m_shader->Unbind(); | m_shader->Unbind(); | ||||
} | } | ||||
@@ -578,7 +578,7 @@ public: | |||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ | #elif !defined __CELLOS_LV2__ && !defined __ANDROID__ | ||||
#else | #else | ||||
#endif | #endif | ||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
} | } | ||||