Replace fill color with object index
This commit is contained in:
parent
e681a28da3
commit
dda6fd4a6e
|
@ -312,9 +312,9 @@ impl Scene {
|
||||||
|
|
||||||
fn build(&self) -> BuiltScene {
|
fn build(&self) -> BuiltScene {
|
||||||
let mut built_scene = BuiltScene::new(&self.view_box);
|
let mut built_scene = BuiltScene::new(&self.view_box);
|
||||||
for object in &self.objects {
|
for (object_index, object) in self.objects.iter().enumerate() {
|
||||||
let mut tiler = Tiler::from_outline(&object.outline,
|
let mut tiler = Tiler::from_outline(&object.outline,
|
||||||
object.color,
|
object_index as u32,
|
||||||
&self.view_box,
|
&self.view_box,
|
||||||
&mut built_scene);
|
&mut built_scene);
|
||||||
tiler.generate_tiles();
|
tiler.generate_tiles();
|
||||||
|
@ -948,7 +948,7 @@ const TILE_HEIGHT: f32 = 16.0;
|
||||||
|
|
||||||
struct Tiler<'o, 'p> {
|
struct Tiler<'o, 'p> {
|
||||||
outline: &'o Outline,
|
outline: &'o Outline,
|
||||||
fill_color: ColorU,
|
object_index: u32,
|
||||||
built_scene: &'p mut BuiltScene,
|
built_scene: &'p mut BuiltScene,
|
||||||
|
|
||||||
view_box: Rect<f32>,
|
view_box: Rect<f32>,
|
||||||
|
@ -963,13 +963,13 @@ struct Tiler<'o, 'p> {
|
||||||
|
|
||||||
impl<'o, 'p> Tiler<'o, 'p> {
|
impl<'o, 'p> Tiler<'o, 'p> {
|
||||||
fn from_outline(outline: &'o Outline,
|
fn from_outline(outline: &'o Outline,
|
||||||
fill_color: ColorU,
|
object_index: u32,
|
||||||
view_box: &Rect<f32>,
|
view_box: &Rect<f32>,
|
||||||
built_scene: &'p mut BuiltScene)
|
built_scene: &'p mut BuiltScene)
|
||||||
-> Tiler<'o, 'p> {
|
-> Tiler<'o, 'p> {
|
||||||
Tiler {
|
Tiler {
|
||||||
outline,
|
outline,
|
||||||
fill_color,
|
object_index,
|
||||||
built_scene,
|
built_scene,
|
||||||
|
|
||||||
view_box: *view_box,
|
view_box: *view_box,
|
||||||
|
@ -1049,7 +1049,7 @@ impl<'o, 'p> Tiler<'o, 'p> {
|
||||||
for tile_index_x in 0..tiles_across {
|
for tile_index_x in 0..tiles_across {
|
||||||
let tile_x = outline_tile_origin.x + tile_index_x as i16;
|
let tile_x = outline_tile_origin.x + tile_index_x as i16;
|
||||||
let tile_y = outline_tile_origin.y + tile_index_y;
|
let tile_y = outline_tile_origin.y + tile_index_y;
|
||||||
self.strip_tiles.push(MaskTilePrimitive::new(tile_x, tile_y, self.fill_color));
|
self.strip_tiles.push(MaskTilePrimitive::new(tile_x, tile_y, self.object_index));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process old active edges.
|
// Process old active edges.
|
||||||
|
@ -1194,7 +1194,7 @@ impl<'o, 'p> Tiler<'o, 'p> {
|
||||||
self.built_scene.solid_tiles.push(SolidTilePrimitive {
|
self.built_scene.solid_tiles.push(SolidTilePrimitive {
|
||||||
tile_x: tile.tile_x,
|
tile_x: tile.tile_x,
|
||||||
tile_y: tile.tile_y,
|
tile_y: tile.tile_y,
|
||||||
color: tile.color,
|
object_index: tile.object_index,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1302,6 +1302,23 @@ fn process_active_edge(active_edge: &mut Segment,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Culling
|
||||||
|
|
||||||
|
fn cull_scene(scene: &mut BuiltScene) {
|
||||||
|
let scene_tile_origin = Point2D::new(f32::floor(scene.view_box.origin.x / TILE_WIDTH) as i32,
|
||||||
|
f32::floor(scene.view_box.origin.y / TILE_HEIGHT) as i32);
|
||||||
|
let scene_tile_lower_right =
|
||||||
|
Point2D::new(f32::ceil(scene.view_box.max_x() / TILE_WIDTH) as i32,
|
||||||
|
f32::ceil(scene.view_box.max_y() / TILE_HEIGHT) as i32);
|
||||||
|
let scene_tile_size = Size2D::new(scene_tile_lower_right.x - scene_tile_origin.x,
|
||||||
|
scene_tile_lower_right.y - scene_tile_origin.y).to_u32();
|
||||||
|
|
||||||
|
let mut z_buffer = FixedBitSet::with_capacity(scene_tile_size.width as usize *
|
||||||
|
scene_tile_size.height as usize);
|
||||||
|
|
||||||
|
// TODO(pcwalton)
|
||||||
|
}
|
||||||
|
|
||||||
// Primitives
|
// Primitives
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -1323,14 +1340,14 @@ struct FillPrimitive {
|
||||||
struct SolidTilePrimitive {
|
struct SolidTilePrimitive {
|
||||||
tile_x: i16,
|
tile_x: i16,
|
||||||
tile_y: i16,
|
tile_y: i16,
|
||||||
color: ColorU,
|
object_index: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
struct MaskTilePrimitive {
|
struct MaskTilePrimitive {
|
||||||
tile_x: i16,
|
tile_x: i16,
|
||||||
tile_y: i16,
|
tile_y: i16,
|
||||||
color: ColorU,
|
object_index: u32,
|
||||||
backdrop: f32,
|
backdrop: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1380,20 +1397,18 @@ impl BuiltScene {
|
||||||
writer.write_all(b"soli")?;
|
writer.write_all(b"soli")?;
|
||||||
writer.write_u32::<LittleEndian>(solid_tiles_size as u32)?;
|
writer.write_u32::<LittleEndian>(solid_tiles_size as u32)?;
|
||||||
for &tile_primitive in &self.solid_tiles {
|
for &tile_primitive in &self.solid_tiles {
|
||||||
let color = tile_primitive.color;
|
|
||||||
writer.write_i16::<LittleEndian>(tile_primitive.tile_x)?;
|
writer.write_i16::<LittleEndian>(tile_primitive.tile_x)?;
|
||||||
writer.write_i16::<LittleEndian>(tile_primitive.tile_y)?;
|
writer.write_i16::<LittleEndian>(tile_primitive.tile_y)?;
|
||||||
writer.write_all(&[color.r, color.g, color.b, color.a]).unwrap();
|
writer.write_u32::<LittleEndian>(tile_primitive.object_index)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.write_all(b"mask")?;
|
writer.write_all(b"mask")?;
|
||||||
writer.write_u32::<LittleEndian>(mask_tiles_size as u32)?;
|
writer.write_u32::<LittleEndian>(mask_tiles_size as u32)?;
|
||||||
for &tile_primitive in &self.mask_tiles {
|
for &tile_primitive in &self.mask_tiles {
|
||||||
let color = tile_primitive.color;
|
|
||||||
writer.write_i16::<LittleEndian>(tile_primitive.tile_x)?;
|
writer.write_i16::<LittleEndian>(tile_primitive.tile_x)?;
|
||||||
writer.write_i16::<LittleEndian>(tile_primitive.tile_y)?;
|
writer.write_i16::<LittleEndian>(tile_primitive.tile_y)?;
|
||||||
writer.write_f32::<LittleEndian>(tile_primitive.backdrop)?;
|
writer.write_f32::<LittleEndian>(tile_primitive.backdrop)?;
|
||||||
writer.write_all(&[color.r, color.g, color.b, color.a]).unwrap();
|
writer.write_u32::<LittleEndian>(tile_primitive.object_index)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
@ -1407,14 +1422,14 @@ impl BuiltScene {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SolidTilePrimitive {
|
impl SolidTilePrimitive {
|
||||||
fn new(tile_x: i16, tile_y: i16, color: ColorU) -> SolidTilePrimitive {
|
fn new(tile_x: i16, tile_y: i16, object_index: u32) -> SolidTilePrimitive {
|
||||||
SolidTilePrimitive { tile_x, tile_y, color }
|
SolidTilePrimitive { tile_x, tile_y, object_index }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MaskTilePrimitive {
|
impl MaskTilePrimitive {
|
||||||
fn new(tile_x: i16, tile_y: i16, color: ColorU) -> MaskTilePrimitive {
|
fn new(tile_x: i16, tile_y: i16, object_index: u32) -> MaskTilePrimitive {
|
||||||
MaskTilePrimitive { tile_x, tile_y, backdrop: 0.0, color }
|
MaskTilePrimitive { tile_x, tile_y, backdrop: 0.0, object_index }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue