From b233ff766a2e399a0a48a98e1f2121e960254950 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 23 Nov 2024 22:17:21 +0100 Subject: fix(engine): use texture texture indices as texture units --- engine/src/opengl/texture.rs | 6 +++--- engine/src/renderer/opengl.rs | 20 ++++++++++++-------- engine/src/texture.rs | 5 ----- 3 files changed, 15 insertions(+), 16 deletions(-) (limited to 'engine') diff --git a/engine/src/opengl/texture.rs b/engine/src/opengl/texture.rs index 074ade7..52c8554 100644 --- a/engine/src/opengl/texture.rs +++ b/engine/src/opengl/texture.rs @@ -1,5 +1,5 @@ use crate::data_types::dimens::Dimens; -use crate::texture::{Id, Properties}; +use crate::texture::Properties; #[derive(Debug)] pub struct Texture @@ -224,8 +224,8 @@ macro_rules! texture_unit_enum { } } - pub fn from_texture_id(texture_id: Id) -> Option { - match texture_id.into_inner() { + pub fn from_num(num: usize) -> Option { + match num { #( N => Some(Self::No~N), )* diff --git a/engine/src/renderer/opengl.rs b/engine/src/renderer/opengl.rs index deb26a8..e7a630b 100644 --- a/engine/src/renderer/opengl.rs +++ b/engine/src/renderer/opengl.rs @@ -203,15 +203,12 @@ fn render( &camera_pos, ); - for texture in &material.textures { + for (index, texture) in material.textures.iter().enumerate() { let gl_texture = gl_textures .entry(texture.id()) .or_insert_with(|| create_gl_texture(texture)); - let texture_unit = - TextureUnit::from_texture_id(texture.id()).unwrap_or_else(|| { - panic!("Texture id {} is a invalid texture unit", texture.id()); - }); + let texture_unit = TextureUnit::from_num(index).expect("Too many textures"); set_active_texture_unit(texture_unit); @@ -562,22 +559,29 @@ fn apply_light( gl_shader_program .set_uniform_vec_3fv(c"material.specular", &material.specular.clone().into()); + let texture_map = material + .textures + .iter() + .enumerate() + .map(|(index, texture)| (texture.id(), index)) + .collect::>(); + #[allow(clippy::cast_possible_wrap)] gl_shader_program.set_uniform_1i( c"material.ambient_map", - material.ambient_map.into_inner() as i32, + *texture_map.get(&material.ambient_map).unwrap() as i32, ); #[allow(clippy::cast_possible_wrap)] gl_shader_program.set_uniform_1i( c"material.diffuse_map", - material.diffuse_map.into_inner() as i32, + *texture_map.get(&material.diffuse_map).unwrap() as i32, ); #[allow(clippy::cast_possible_wrap)] gl_shader_program.set_uniform_1i( c"material.specular_map", - material.specular_map.into_inner() as i32, + *texture_map.get(&material.specular_map).unwrap() as i32, ); gl_shader_program.set_uniform_1fv(c"material.shininess", material.shininess); diff --git a/engine/src/texture.rs b/engine/src/texture.rs index f82b59d..16c1941 100644 --- a/engine/src/texture.rs +++ b/engine/src/texture.rs @@ -181,11 +181,6 @@ impl Id { Self { id } } - - pub(crate) fn into_inner(self) -> u32 - { - self.id - } } impl Display for Id -- cgit v1.2.3-18-g5258