diff --git a/stb_voxel_render.h b/stb_voxel_render.h index 30dd42f..8469464 100644 --- a/stb_voxel_render.h +++ b/stb_voxel_render.h @@ -2900,7 +2900,9 @@ static void stbvox_make_mesh_for_block(stbvox_mesh_maker *mm, stbvox_pos pos, in if (mm->input.selector) mesh = mm->input.selector[v_off]; - + else if (mm->input.block_selector) + mesh = mm->input.block_selector[mm->input.blocktype[v_off]]; + // check if we're going off the end if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) { mm->full = 1; @@ -3109,7 +3111,9 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po mesh = mm->default_mesh; if (mm->input.selector) mesh = mm->input.selector[v_off]; - + else if (mm->input.block_selector) + mesh = mm->input.block_selector[bt]; + if (geo <= STBVOX_GEOM_ceil_slope_north_is_bottom) { // this is the simple case, we can just use regular block gen with special vmesh calculated with vheight stbvox_mesh_vertex basevert; @@ -3130,7 +3134,9 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po basevert = stbvox_vertex_encode(pos.x, pos.y, pos.z << STBVOX_CONFIG_PRECISION_Z, 0,0); if (mm->input.selector) { mesh = mm->input.selector[v_off]; - } + } else if (mm->input.block_selector) + mesh = mm->input.block_selector[bt]; + // check if we're going off the end if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) { @@ -3350,6 +3356,9 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po mesh = mm->input.selector[v_off]; simple_rot = mesh >> 4; mesh &= 15; + } + if (mm->input.block_selector) { + mesh = mm->input.block_selector[bt]; } // check if we're going off the end