rust/lib-hedgewars-engine/src/render/map.rs
changeset 15760 ff1432e873bd
parent 15286 16bd389fc735
child 15761 e7eb0cd5b0e4
equal deleted inserted replaced
15759:c929e25a7da2 15760:ff1432e873bd
     4 
     4 
     5 use super::{
     5 use super::{
     6     camera::Camera,
     6     camera::Camera,
     7     gl::{
     7     gl::{
     8         Buffer, InputElement, InputFormat, InputLayout, PipelineState, Shader, Texture2D,
     8         Buffer, InputElement, InputFormat, InputLayout, PipelineState, Shader, Texture2D,
     9         VariableBinding,
     9         TextureDataType, TextureFilter, TextureFormat, TextureInternalFormat, VariableBinding,
    10     },
    10     },
    11 };
    11 };
       
    12 
       
    13 use std::num::NonZeroU32;
    12 
    14 
    13 // TODO: temp
    15 // TODO: temp
    14 const VERTEX_SHADER: &'static str = r#"
    16 const VERTEX_SHADER: &'static str = r#"
    15 #version 150
    17 #version 150
    16 
    18 
   162                     let offset = x * tw * bpp + y * th * lw * bpp;
   164                     let offset = x * tw * bpp + y * th * lw * bpp;
   163 
   165 
   164                     let data = unsafe { &land.as_bytes()[offset..] };
   166                     let data = unsafe { &land.as_bytes()[offset..] };
   165                     let stride = land.width();
   167                     let stride = land.width();
   166 
   168 
   167                     (data, stride as u32)
   169                     (data, NonZeroU32::new(stride as u32))
   168                 };
   170                 };
   169 
   171 
   170                 let texture_index = if idx >= self.textures.len() {
   172                 let texture_index = if idx >= self.textures.len() {
   171                     let texture = Texture2D::with_data(
   173                     let texture = Texture2D::with_data(
   172                         data,
   174                         data,
   173                         stride,
   175                         stride,
   174                         self.tile_size,
   176                         self.tile_size,
   175                         gl::RGBA8,
   177                         TextureInternalFormat::Rgba8,
   176                         gl::RGBA,
   178                         TextureFormat::Rgba,
   177                         gl::UNSIGNED_BYTE,
   179                         TextureDataType::UnsignedByte,
   178                         gl::NEAREST,
   180                         TextureFilter::Nearest,
   179                     );
   181                     );
   180 
   182 
   181                     let texture_index = self.textures.len();
   183                     let texture_index = self.textures.len();
   182                     self.textures.push(texture);
   184                     self.textures.push(texture);
   183 
   185 
   187 
   189 
   188                     self.textures[idx].update(
   190                     self.textures[idx].update(
   189                         texture_region,
   191                         texture_region,
   190                         data,
   192                         data,
   191                         stride,
   193                         stride,
   192                         gl::RGBA,
   194                         TextureFormat::Rgba,
   193                         gl::UNSIGNED_BYTE,
   195                         TextureDataType::UnsignedByte,
   194                     );
   196                     );
   195                     idx
   197                     idx
   196                 };
   198                 };
   197 
   199 
   198                 let tile = MapTile {
   200                 let tile = MapTile {