diff options
| author | HampusM <hampus@hampusmat.com> | 2026-11-05 10:12:09 +0100 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-11-05 10:12:09 +0100 |
| commit | e8472cc24f5eafd8a9a08b64c52eb49d01ac4031 (patch) | |
| tree | f3445f52e562ed50d55ddfa24b39f783db2f4df2 /engine/src/rendering/backend/opengl.rs | |
| parent | c45826d102dc4f47c16c65d9837cc03b59534f23 (diff) | |
feat(engine): make shader entry point names not hardcoded
Diffstat (limited to 'engine/src/rendering/backend/opengl.rs')
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 44 |
1 files changed, 9 insertions, 35 deletions
diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index 0a58417..aad9b6c 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -124,7 +124,6 @@ use crate::rendering::shader::{ Context as ShaderContext, ContextSessionInitOpts as ShaderContextSessionInitOpts, DebugInfoLevel as ShaderDebugInfoLevel, - EntrypointFlags as ShaderEntrypointFlags, Error as ShaderError, LineDirectiveMode as ShaderLineDirectiveMode, OptimizationLevel as ShaderOptimizationLevel, @@ -953,8 +952,8 @@ fn handle_commands( info: ShaderInfo { vertex_desc: if shader_program .metadata() - .link_entrypoints - .contains(ShaderEntrypointFlags::VERTEX) + .vertex_stage_entry_point_idx + .is_some() { Some(shader_program.create_vertex_desc( backend_properties.shader_target_id, @@ -1869,26 +1868,13 @@ fn create_and_init_gl_shader_program( { let gl_shader_program = GlShaderProgram::new(current_context); - let shader_program_reflection = shader_program - .reflection(backend_properties.shader_target_id) - .expect("Not possible"); - - if shader_program - .metadata() - .link_entrypoints - .contains(ShaderEntrypointFlags::VERTEX) + if let Some(vertex_stage_entry_point_idx) = + shader_program.metadata().vertex_stage_entry_point_idx { - let Some(vs_entry_point_index) = shader_program_reflection - .entry_points() - .position(|entry_point| entry_point.stage() == ShaderStage::Vertex) - else { - unreachable!(); - }; - let gl_vertex_shader = create_and_init_gl_shader( current_context, shader_program, - vs_entry_point_index, + vertex_stage_entry_point_idx, GlShaderKind::Vertex, backend_properties, )?; @@ -1896,22 +1882,13 @@ fn create_and_init_gl_shader_program( gl_shader_program.attach(current_context, &gl_vertex_shader); } - if shader_program - .metadata() - .link_entrypoints - .contains(ShaderEntrypointFlags::FRAGMENT) + if let Some(fragment_stage_entry_point_idx) = + shader_program.metadata().fragment_stage_entry_point_idx { - let Some(fs_entry_point_index) = shader_program_reflection - .entry_points() - .position(|entry_point| entry_point.stage() == ShaderStage::Fragment) - else { - unreachable!(); - }; - let gl_fragment_shader = create_and_init_gl_shader( current_context, shader_program, - fs_entry_point_index, + fragment_stage_entry_point_idx, GlShaderKind::Fragment, backend_properties, )?; @@ -1927,14 +1904,11 @@ fn create_and_init_gl_shader_program( fn create_and_init_gl_shader( current_context: &MaybeCurrentContextWithFns, shader_program: &ShaderProgram, - entry_point_index: usize, + entry_point_index: u32, gl_shader_kind: GlShaderKind, backend_properties: &BackendProperties, ) -> Result<GlShader, GlShaderCreationError> { - let entry_point_index = u32::try_from(entry_point_index) - .expect("Shader entry point index does not fit in 32-bit unsigned int"); - let entry_point_code = shader_program .get_entry_point_code(entry_point_index, backend_properties.shader_target_id) .map_err(|err| GlShaderCreationError::GetShaderEntryPointCodeFailed { |
