Arbeiten mit Tiles (libronin)

Aus SEGA-DC.DE
Version vom 2. Januar 2011, 20:38 Uhr von Zilti (Diskussion | Beiträge) (Die Seite wurde neu angelegt: In diesem Beispiel verwenden wir den Tile-Beschleuniger von libronin um eine farbige Box auf dem Bildschirm anzuzeigen. #include "ronin/ronin.h" /* This is the defau...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

In diesem Beispiel verwenden wir den Tile-Beschleuniger von libronin um eine farbige Box auf dem Bildschirm anzuzeigen.

#include "ronin/ronin.h"
/* This is the default entry point for your program */
int render_solid_box(float x1, float y1, float x2, float y2, int color)
{
	struct polygon_list poly;
	struct packed_colour_vertex_list vert;
	// Initialize to some sane values: it is an opaque colored polygon, no texture.
	poly.cmd = TA_CMD_POLYGON | TA_CMD_POLYGON_TYPE_OPAQUE |
		TA_CMD_POLYGON_STRIPLENGTH_2 | TA_CMD_POLYGON_PACKED_COLOUR |
		TA_CMD_POLYGON_GOURAUD_SHADING;
	poly.mode1 = TA_POLYMODE1_Z_ALWAYS | TA_POLYMODE1_NO_Z_UPDATE;
	poly.mode2 = TA_POLYMODE2_BLEND_SRC | TA_POLYMODE2_FOG_DISABLED;

	// Der Standard für Texturen auf "keine Textur" setzen
	poly.texture = 0;
	// Die Polygonfarbe auf 0 (Schwarz) setzen
	poly.red = poly.green = poly.blue = poly.alpha = 0;
	// Commit this polygon to the Tile Accelerator
	ta_commit_list(&poly);
	// Default the vertex information to something sensable.
	vertex.cmd = TA_CMD_VERTEX;
	vertex.ocolour = 0;
	vertex.z = 0.5;
	vertex.u = 0.0;
	vertex.v = 0.0;
	vertex.colour = color;

	// submit the upper left corner
	vertex.x = x1;
	vertex.y = y1;
	ta_commit_list(&vertex);

	// submit the upper right corner
	vertex.x = x2;
	ta_commit_list(&vertex);

	// submit the lower left corner
	vertex.x = x1;
	vertex.y = y2;
	ta_commit_list(&vertex);

	// submit the lower right corner
	vertex.x = x2;
	vertex.cmd |= TA_CMD_VERTEX_EOS;
	ta_commit_list(&vertex);
} 

/* This is the default entry point for your program */
int main(int argc, char **argv)
{
	serial_init(57600);
	usleep(200000);
	dc_setup_ta();
	for(;;)
	{
		ta_sync();
		ta_begin_frame();
		// begin opaque poly list
		render_solid_box(20.0, 20.0, 620.0, 460.0, 0xFFFFFFFF); // Eine weisse undurchsichtige Box auf den Screen zeichnen
		ta_commit_end();

		// Beginn Liste durchsichtige Polygone
		commit_dummy_transpoly();
		ta_commit_end();
		// Frame zum Tile Accelerator schicken
		ta_commit_frame();
	}
	return 0;
}

Der "dc_setup_ta()" Aufruf initialisiert und konfiguriert die libronin-Bibliothek für die Verwendung des Tile-Beschleuniger-Chips der Dreamcast. Der Aufruf "ta_sync()" stellt sicher, dass der Tile-Beschleuniger bereit ist für ein neues Frame and Daten. Der Aufruf "ta_begin_frame()" initialisiert die Framebuffer für die Listen von undurchsichtigen und transparenten Polygonen, die gerendert werden sollen.

Bei der Verwendung des Tile-Beschleunigers ist es wichtig, ihm keine leeren Listen zu schicken. Es kommt selten vor, dass man nicht mindestens einen undurchsichtigen Polygon in einem Frame hat. Deshalb gibt es keine Funktion zum Senden eines leeren Polygons für die Liste der undurchsichtigen Polygone. Bei der Liste der durchsichtigen Polygone gibt es dagegen eine Funktion "commit_dummy_transpoly()", die ein transparentes Polygon generiert und sendet.