// Pipeline.java public class Pipeline extends Transform { Pipeline (Render render1) { super (256); transformed_a = new Vector (); transformed_b = new Vector (); transformed_c = new Vector (); render = render1; additive = false; viewport (0.0F, 0.0F, 1.0F, 1.0F); } public final void additive (boolean flag) {additive = flag;} public final void diffuse (Color color) {diffuse = color.pack ();} public final void line (Vector vector, Vector vector1) { transform (vector, transformed_a); transform (vector1, transformed_b); float f = 1.0F / transformed_a.w; transformed_a.x *= f; transformed_a.y *= f; transformed_a.z *= f; f = 1.0F / transformed_b.w; transformed_b.x *= f; transformed_b.y *= f; transformed_b.z *= f; float f1 = transformed_a.x * scale_x + offset_x; float f2 = transformed_a.y * scale_y + offset_y; float f3 = transformed_b.x * scale_x + offset_x; float f4 = transformed_b.y * scale_y + offset_y; if (!additive) render.line (f1, f2, f3, f4, diffuse); else render.line_additive (f1, f2, f3, f4, diffuse); } public final void point (Vector vector) { transform (vector, transformed_a); float f = 1.0F / transformed_a.w; transformed_a.x *= f; transformed_a.y *= f; transformed_a.z *= f; if (transformed_a.z < 0.0F) return; else { float f1 = transformed_a.x * scale_x + offset_x; float f2 = transformed_a.y * scale_y + offset_y; render.point_clipped (f1, f2, diffuse); } } public final void specular (Color color) {specular = color.pack ();} public final void sprite (Vector vector, Vector vector1) { transform (vector, transformed_a); transform (vector1, transformed_b); float f = 1.0F / transformed_a.w; transformed_a.x *= f; transformed_a.y *= f; transformed_a.z *= f; f = 1.0F / transformed_b.w; transformed_b.x *= f; transformed_b.y *= f; transformed_b.z *= f; float f1 = transformed_a.x * scale_x + offset_x; float f2 = transformed_a.y * scale_y + offset_y; float f3 = transformed_b.x * scale_x + offset_x; float f4 = transformed_b.y * scale_y + offset_y; render.sprite(f1, f2, f3, f4, texture.pixels, texture.width, texture.height); } public final void texture (Texture texture1) {texture = texture1;} public final void triangle (Vector vector, Vector vector1, Vector vector2) { transform (vector, transformed_a); transform (vector1, transformed_b); transform (vector2, transformed_c); float f = 1.0F / transformed_a.w; transformed_a.x *= f; transformed_a.y *= f; transformed_a.z *= f; f = 1.0F / transformed_b.w; transformed_b.x *= f; transformed_b.y *= f; transformed_b.z *= f; f = 1.0F / transformed_c.w; transformed_c.x *= f; transformed_c.y *= f; transformed_c.z *= f; float f1 = transformed_a.x * scale_x + offset_x; float f2 = transformed_a.y * scale_y + offset_y; float f3 = transformed_b.x * scale_x + offset_x; float f4 = transformed_b.y * scale_y + offset_y; float f5 = transformed_c.x * scale_x + offset_x; float f6 = transformed_c.y * scale_y + offset_y; if (!additive) render.triangle (f1, f2, f3, f4, f5, f6, diffuse); else render.triangle_additive (f1, f2, f3, f4, f5, f6, diffuse); } public final void viewport (float f, float f1, float f2, float f3) { int i = render.width (); int j = render.height (); scale_x = (float)i / 2.0F; scale_y = (float)(-j) / 2.0F; offset_x = (float)i / 2.0F; offset_y = (float)j / 2.0F; } Render render; Vector transformed_a, transformed_b, transformed_c; float scale_x, scale_y, offset_x, offset_y; int diffuse, specular; boolean additive; Texture texture; }