diff --git a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx index 997cc4dd3e..2f9889b8d7 100644 --- a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx +++ b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx @@ -2795,8 +2795,6 @@ draw_triangles(const qpGeomTriangles *primitive) { //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: draw_tristrips(const qpGeomTristrips *primitive) { - D3DFORMAT index_type = get_index_type(primitive->get_index_type()); - if (connect_triangle_strips && _current_fill_mode != RenderModeAttrib::M_wireframe) { // One long triangle strip, connected by the degenerate vertices // that have already been set up within the primitive. @@ -2819,6 +2817,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { } else { // Indexed, client arrays, one long triangle strip. + D3DFORMAT index_type = get_index_type(primitive->get_index_type()); _pD3DDevice->DrawIndexedPrimitiveUP (D3DPT_TRIANGLESTRIP, min_vertex, max_vertex - min_vertex + 1, @@ -2864,7 +2863,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { primitive->get_maxs()->get_num_rows() == (int)ends.size()); if (_active_vbuffer != NULL) { - // Indexed, client arrays, individual triangle strips. + // Indexed, vbuffers, individual triangle strips. IndexBufferContext *ibc = ((qpGeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); nassertv(ibc != (IndexBufferContext *)NULL); apply_index_buffer(ibc); @@ -2887,6 +2886,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { CPTA_uchar array_data = _vertex_data->get_array(0)->get_data(); int stride = _vertex_data->get_format()->get_array(0)->get_stride(); CPTA_uchar vertices = primitive->get_data(); + D3DFORMAT index_type = get_index_type(primitive->get_index_type()); unsigned int start = 0; for (size_t i = 0; i < ends.size(); i++) { @@ -2904,9 +2904,10 @@ draw_tristrips(const qpGeomTristrips *primitive) { } } } else { + unsigned int first_vertex = primitive->get_first_vertex(); + if (_active_vbuffer != NULL) { - // Nonindexed, client arrays, individual triangle strips. - unsigned int first_vertex = primitive->get_first_vertex(); + // Nonindexed, vbuffers, individual triangle strips. unsigned int start = 0; for (size_t i = 0; i < ends.size(); i++) { _vertices_tristrip_pcollector.add_level(ends[i] - start); @@ -2921,7 +2922,6 @@ draw_tristrips(const qpGeomTristrips *primitive) { // Nonindexed, client arrays, individual triangle strips. CPTA_uchar array_data = _vertex_data->get_array(0)->get_data(); int stride = _vertex_data->get_format()->get_array(0)->get_stride(); - unsigned int first_vertex = primitive->get_first_vertex(); unsigned int start = 0; for (size_t i = 0; i < ends.size(); i++) { @@ -2951,7 +2951,6 @@ draw_trifans(const qpGeomTrifans *primitive) { if (primitive->is_indexed()) { int min_vertex = dx_broken_max_index ? 0 : primitive->get_min_vertex(); int max_vertex = primitive->get_max_vertex(); - D3DFORMAT index_type = get_index_type(primitive->get_index_type()); // Send the individual triangle fans. There's no connecting fans // with degenerate vertices, so no worries about that. @@ -2986,6 +2985,7 @@ draw_trifans(const qpGeomTrifans *primitive) { CPTA_uchar array_data = _vertex_data->get_array(0)->get_data(); int stride = _vertex_data->get_format()->get_array(0)->get_stride(); CPTA_uchar vertices = primitive->get_data(); + D3DFORMAT index_type = get_index_type(primitive->get_index_type()); unsigned int start = 0; for (size_t i = 0; i < ends.size(); i++) { @@ -3003,6 +3003,8 @@ draw_trifans(const qpGeomTrifans *primitive) { } } } else { + unsigned int first_vertex = primitive->get_first_vertex(); + if (_active_vbuffer != NULL) { // Nonindexed, vbuffers. unsigned int start = 0; @@ -3010,7 +3012,7 @@ draw_trifans(const qpGeomTrifans *primitive) { _vertices_trifan_pcollector.add_level(ends[i] - start); _pD3DDevice->DrawPrimitive (D3DPT_TRIANGLEFAN, - start, ends[i] - start - 2); + first_vertex + start, ends[i] - start - 2); start = ends[i]; } @@ -3019,7 +3021,6 @@ draw_trifans(const qpGeomTrifans *primitive) { // Nonindexed, client arrays. CPTA_uchar array_data = _vertex_data->get_array(0)->get_data(); int stride = _vertex_data->get_format()->get_array(0)->get_stride(); - unsigned int first_vertex = primitive->get_first_vertex(); unsigned int start = 0; for (size_t i = 0; i < ends.size(); i++) { @@ -3077,7 +3078,8 @@ draw_lines(const qpGeomLines *primitive) { if (_active_vbuffer != NULL) { // Nonindexed, vbuffers. _pD3DDevice->DrawPrimitive - (D3DPT_LINELIST, primitive->get_first_vertex(), + (D3DPT_LINELIST, + primitive->get_first_vertex(), primitive->get_num_primitives()); } else {