equal
deleted
inserted
replaced
71 } |
71 } |
72 |
72 |
73 const SPRITE_LOAD_LIST: &[(SpriteId, &str)] = &[ |
73 const SPRITE_LOAD_LIST: &[(SpriteId, &str)] = &[ |
74 ( |
74 ( |
75 SpriteId::Mine, |
75 SpriteId::Mine, |
76 "../../share/hedgewars/Data/Graphics/MineOn.png", |
76 "Graphics/MineOn.png", |
77 ), |
77 ), |
78 ( |
78 ( |
79 SpriteId::Grenade, |
79 SpriteId::Grenade, |
80 "../../share/hedgewars/Data/Graphics/Bomb.png", |
80 "Graphics/Bomb.png", |
81 ), |
81 ), |
82 ( |
82 ( |
83 SpriteId::Cheese, |
83 SpriteId::Cheese, |
84 "../../share/hedgewars/Data/Graphics/cheese.png", |
84 "Graphics/cheese.png", |
85 ), |
85 ), |
86 ( |
86 ( |
87 SpriteId::Cleaver, |
87 SpriteId::Cleaver, |
88 "../../share/hedgewars/Data/Graphics/cleaver.png", |
88 "Graphics/cleaver.png", |
89 ), |
89 ), |
90 ]; |
90 ]; |
91 |
91 |
92 const MAX_SPRITES: usize = SpriteId::MaxSprite as usize + 1; |
92 const MAX_SPRITES: usize = SpriteId::MaxSprite as usize + 1; |
93 |
93 |
122 } |
122 } |
123 |
123 |
124 const ATLAS_SIZE: Size = Size::square(2048); |
124 const ATLAS_SIZE: Size = Size::square(2048); |
125 |
125 |
126 impl GearRenderer { |
126 impl GearRenderer { |
127 pub fn new() -> Self { |
127 pub fn new(data_path: &Path) -> Self { |
128 let mut atlas = AtlasCollection::new(ATLAS_SIZE); |
128 let mut atlas = AtlasCollection::new(ATLAS_SIZE); |
129 |
129 |
130 let texture = Texture2D::new( |
130 let texture = Texture2D::new( |
131 ATLAS_SIZE, |
131 ATLAS_SIZE, |
132 TextureInternalFormat::Rgba8, |
132 TextureInternalFormat::Rgba8, |
134 ); |
134 ); |
135 |
135 |
136 let mut allocation = Box::new([Default::default(); MAX_SPRITES]); |
136 let mut allocation = Box::new([Default::default(); MAX_SPRITES]); |
137 |
137 |
138 for (sprite, file) in SPRITE_LOAD_LIST { |
138 for (sprite, file) in SPRITE_LOAD_LIST { |
139 let path = Path::new(file); |
139 let path = data_path.join(Path::new(file)); |
140 let size = load_sprite_size(path).expect(&format!("Unable to open {}", file)); |
140 let size = load_sprite_size(path.as_path()).expect(&format!("Unable to open {}", file)); |
141 let index = atlas |
141 let index = atlas |
142 .insert_sprite(size) |
142 .insert_sprite(size) |
143 .expect(&format!("Could not store sprite {:?}", sprite)); |
143 .expect(&format!("Could not store sprite {:?}", sprite)); |
144 let (texture_index, rect) = atlas.get_rect(index).unwrap(); |
144 let (texture_index, rect) = atlas.get_rect(index).unwrap(); |
145 |
145 |
146 let mut pixels = vec![255u8; size.area() * 4].into_boxed_slice(); |
146 let mut pixels = vec![255u8; size.area() * 4].into_boxed_slice(); |
147 load_sprite_pixels(path, &mut pixels).expect("Unable to load Graphics"); |
147 load_sprite_pixels(path.as_path(), &mut pixels).expect("Unable to load Graphics"); |
148 |
148 |
149 texture.update( |
149 texture.update( |
150 rect, |
150 rect, |
151 &pixels, |
151 &pixels, |
152 None, |
152 None, |
260 |
260 |
261 self.vertex_buffer.write_typed(&data); |
261 self.vertex_buffer.write_typed(&data); |
262 let _buffer_bind = self.layout.bind(&[(0, &self.vertex_buffer)], None); |
262 let _buffer_bind = self.layout.bind(&[(0, &self.vertex_buffer)], None); |
263 |
263 |
264 let _state = PipelineState::new().with_blend(); |
264 let _state = PipelineState::new().with_blend(); |
265 |
|
266 unsafe { |
265 unsafe { |
267 gl::DrawArrays(gl::TRIANGLES, 0, entries.len() as i32 * 6); |
266 gl::DrawArrays(gl::TRIANGLES, 0, entries.len() as i32 * 6); |
268 } |
267 } |
269 } |
268 } |
270 } |
269 } |