aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/src/ffi
diff options
context:
space:
mode:
Diffstat (limited to 'adapters/fparkan-render-vulkan/src/ffi')
-rw-r--r--adapters/fparkan-render-vulkan/src/ffi/smoke.rs19
-rw-r--r--adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs6
2 files changed, 22 insertions, 3 deletions
diff --git a/adapters/fparkan-render-vulkan/src/ffi/smoke.rs b/adapters/fparkan-render-vulkan/src/ffi/smoke.rs
index 4ad1c1b..30a42dd 100644
--- a/adapters/fparkan-render-vulkan/src/ffi/smoke.rs
+++ b/adapters/fparkan-render-vulkan/src/ffi/smoke.rs
@@ -1902,18 +1902,23 @@ impl VulkanSmokeRenderer {
60,
&material_uv_transforms,
);
- let unlit = self.material_unlit.get(texture_index).ok_or(
+ let material_mode = self.material_unlit.get(texture_index).ok_or(
VulkanSmokeRendererError::InvariantViolation {
context: "static material unlit flag",
},
)?;
- let unlit = [unlit.to_ne_bytes()];
+ let material_mode = if range.terrain_base_only {
+ ((*material_mode).round() as i32 | 16) as f32
+ } else {
+ *material_mode
+ };
+ let material_mode = [material_mode.to_ne_bytes()];
device.device().cmd_push_constants(
command_buffer,
resources.pipeline_layout,
vk::ShaderStageFlags::VERTEX | vk::ShaderStageFlags::FRAGMENT,
124,
- &unlit.concat(),
+ &material_mode.concat(),
);
device.device().cmd_draw_indexed(
command_buffer,
@@ -2577,6 +2582,7 @@ mod tests {
lightmap_index: 4,
batch_flags: 0x108,
pipeline_state: base_state,
+ terrain_base_only: false,
alpha_test_reference: 17,
},
VulkanStaticDrawRange {
@@ -2586,6 +2592,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
},
];
@@ -2769,6 +2776,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: fparkan_render::LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
})
.collect::<Vec<_>>();
@@ -2792,6 +2800,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: fparkan_render::LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
},
super::super::VulkanStaticDrawRange {
@@ -2801,6 +2810,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: fparkan_render::LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
},
super::super::VulkanStaticDrawRange {
@@ -2810,6 +2820,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: fparkan_render::LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
},
];
@@ -2833,6 +2844,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: fparkan_render::LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
})
.collect::<Vec<_>>();
@@ -2861,6 +2873,7 @@ mod tests {
lightmap_index: u8::MAX,
batch_flags: 0,
pipeline_state: LegacyPipelineState::default(),
+ terrain_base_only: false,
alpha_test_reference: 0,
})
.collect::<Vec<_>>();
diff --git a/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs b/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs
index ac31e9a..51f8384 100644
--- a/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs
+++ b/adapters/fparkan-render-vulkan/src/ffi/smoke_types.rs
@@ -422,6 +422,8 @@ pub struct VulkanStaticDrawRange {
/// Bits `0x100` and `0x008` opt a range into that queue independently of
/// the material blend category.
pub batch_flags: u16,
+ /// Terrain ranges that use the native lit base-only path (face flag 0x400 clear).
+ pub terrain_base_only: bool,
/// Backend-neutral fixed-function state for this source range.
pub pipeline_state: LegacyPipelineState,
/// Alpha-test reference in legacy 0..=255 units; dynamic material data.
@@ -754,6 +756,7 @@ impl VulkanStaticMesh {
material_index: 0,
lightmap_index: u8::MAX,
batch_flags: 0,
+ terrain_base_only: false,
pipeline_state: LegacyPipelineState::default(),
alpha_test_reference: 0,
}],
@@ -989,6 +992,7 @@ mod static_mesh_tests {
material_index: 0,
lightmap_index: u8::MAX,
batch_flags: 0,
+ terrain_base_only: false,
pipeline_state: LegacyPipelineState::default(),
alpha_test_reference: 0,
}],
@@ -1019,6 +1023,7 @@ mod static_mesh_tests {
material_index: 7,
lightmap_index: u8::MAX,
batch_flags: 0,
+ terrain_base_only: false,
pipeline_state: LegacyPipelineState::default(),
alpha_test_reference: 0,
},
@@ -1028,6 +1033,7 @@ mod static_mesh_tests {
material_index: 2,
lightmap_index: u8::MAX,
batch_flags: 0,
+ terrain_base_only: false,
pipeline_state: LegacyPipelineState::default(),
alpha_test_reference: 0,
},