void draw_terrain_3d_buffered_polygons ( void ) { if ( vertex_buffer != -1 ) { // // Finalise the last vertex buffer used // unlock_d3d_alpha_vertex_buffer ( vertex_buffer ); vertex_buffer_indices[vertex_buffer].number = base_index - vertex_buffer_indices[vertex_buffer].base_index; if ( base_index ) { int count; // // Flush any buffered primitives // finalise_primitives (); // // Set the alpha blend modes // set_d3d_alpha_fog_zbuffer ( TRUE, FALSE, TRUE, FALSE ); // // Set the texture handle // set_d3d_texture ( 0, load_hardware_texture_map ( terrain_buffered_polygons_texture ) ); // // Draw all the buffered vertex buffers // for ( count = 0; count <= vertex_buffer; count++ ) { #ifdef _WIN32 unsigned int d3drval; d3drval = IDirect3DDevice7_DrawIndexedPrimitiveVB ( d3d.device, D3DPT_TRIANGLELIST, d3d.alpha_vertex_buffer[count], 0, vertex_buffer_indices[count].number_of_vertices_buffered, &buffered_indices[ vertex_buffer_indices[count].base_index ], vertex_buffer_indices[count].number, ( unsigned long ) ( 0 ) ); if ( d3drval != DD_OK ) { debug_log ( "Unable to draw buffered triangles: %s", get_ddraw_error_message ( d3drval ) ); } #endif Transform(); glVertexPointer(3, GL_FLOAT, sizeof(D3DTLVERTEX), 0); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(D3DTLVERTEX), (GLvoid *) offsetof(D3DTLVERTEX, r)); glTexCoordPointer(2, GL_FLOAT, sizeof(D3DTLVERTEX), (GLvoid *) offsetof(D3DTLVERTEX, tu)); glDrawElements(GL_TRIANGLES,vertex_buffer_indices[count].number,GL_UNSIGNED_SHORT, (GLvoid *) buffered_indices[ vertex_buffer_indices[count].base_index]); // OpenGlDrawIndexedBuffer(GL_TRIANGLES,d3d.alpha_vertex_buffer[count],0,vertex_buffer_indices[count].number_of_vertices_buffered, // buffered_indices[ vertex_buffer_indices[count].base_index]); } // // Turn the blend mode off // set_d3d_alpha_fog_zbuffer ( FALSE, TRUE, TRUE, TRUE ); } // // Reset the things! // reset_terrain_3d_buffered_polygons (); } }
void draw_terrain_3d_buffered_polygons ( void ) { if ( vertex_buffer != -1 ) { // // Finalise the last vertex buffer used // unlock_d3d_alpha_vertex_buffer ( vertex_buffer ); vertex_buffer_indices[vertex_buffer].number = base_index - vertex_buffer_indices[vertex_buffer].base_index; if ( base_index ) { int count; // // Flush any buffered primitives // finalise_primitives (); // // Set the alpha blend modes // set_d3d_alpha_fog_zbuffer ( TRUE, FALSE, TRUE, FALSE ); // // Set the texture handle // set_d3d_texture ( 0, terrain_buffered_polygons_texture ); // // Draw all the buffered vertex buffers // for ( count = 0; count <= vertex_buffer; count++ ) { f3d_draw_vb ( D3DPT_TRIANGLELIST, d3d.alpha_vertex_buffer[count], 0, vertex_buffer_indices[count].number_of_vertices_buffered, &buffered_indices[ vertex_buffer_indices[count].base_index ], vertex_buffer_indices[count].number ); } // // Turn the blend mode off // set_d3d_alpha_fog_zbuffer ( FALSE, TRUE, TRUE, TRUE ); } // // Reset the things! // reset_terrain_3d_buffered_polygons (); } }