示例#1
0
LPD3DTLVERTEX get_terrain_3d_buffered_vertices ( int number_of_vertices )
{

	if ( vertex_buffer == -1 )
	{

		//
		// Open up a vertex buffer
		//

		base_index = 0;

		vertex_buffer = 0;

		vertex_buffer_indices[vertex_buffer].base_index = 0;
		vertex_buffer_indices[vertex_buffer].number_of_vertices_buffered = 0;

		buffered_vertices = get_d3d_alpha_vertex_buffer_vertices ( vertex_buffer );
	}

	if ( vertex_buffer_indices[vertex_buffer].number_of_vertices_buffered + number_of_vertices > 256 )
	{

		//
		// Move onto the next vertex buffer
		//

		ASSERT ( vertex_buffer < ( MAX_ALPHA_VERTEX_BUFFERS -1 ) );

		unlock_d3d_alpha_vertex_buffer ( vertex_buffer );

		vertex_buffer_indices[vertex_buffer].number = base_index - vertex_buffer_indices[vertex_buffer].base_index;

		vertex_buffer++;

		vertex_buffer_indices[vertex_buffer].base_index = base_index;

		vertex_buffer_indices[vertex_buffer].number_of_vertices_buffered = 0;

		buffered_vertices = get_d3d_alpha_vertex_buffer_vertices ( vertex_buffer );
	}

	return ( &buffered_vertices[vertex_buffer_indices[vertex_buffer].number_of_vertices_buffered] );
}
示例#2
0
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 ();
	}

}
示例#3
0
文件: terrbuf.c 项目: Comanche93/eech
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 ();
	}
}