write_region Subroutine

private subroutine write_region(g)

A region's frustum into its mesh (uploaded), and shown or hidden.

Arguments

Type IntentOptional Attributes Name
type(ShadowRegion), intent(in) :: g

the region (umbra, penumbra or antumbra)


Calls

proc~~write_region~~CallsGraph proc~write_region write_region interface~vkf_mesh_vertices_changed vkf_mesh_vertices_changed proc~write_region->interface~vkf_mesh_vertices_changed interface~vkf_switch_set vkf_switch_set proc~write_region->interface~vkf_switch_set proc~check_status check_status proc~write_region->proc~check_status proc~mesh_arrays mesh_arrays proc~write_region->proc~mesh_arrays interface~vkf_mesh_array vkf_mesh_array proc~mesh_arrays->interface~vkf_mesh_array

Called by

proc~~write_region~~CalledByGraph proc~write_region write_region proc~shape_regions shape_regions proc~shape_regions->proc~write_region proc~place place proc~place->proc~shape_regions proc~shadow_late_update ShadowCones%shadow_late_update proc~shadow_late_update->proc~place

Source Code

    subroutine write_region(g)
        type(ShadowRegion), intent(in) :: g                 !! the region (umbra, penumbra or antumbra)
        real(c_float), dimension(:,:), pointer :: v, normals, uv
        integer(c_int32_t), dimension(:), pointer :: indices
        real(wp) :: a
        integer :: i, n
        if (.not. c_associated(g%mesh)) return
        n = n_around
        if (g%drawn) then
            call mesh_arrays(g%mesh, 2 * n, 6 * n, v, normals, uv, indices)
            do i = 1, n
                a = 2.0_wp * pi * (i - 1) / n
                v(:, i) = real([g%r0 * cos(a), g%r0 * sin(a), g%z0], c_float)
                v(:, n + i) = real([g%r1 * cos(a), g%r1 * sin(a), g%z1], c_float)
            end do
            call check_status(vkf_mesh_vertices_changed(g%mesh), 'shadow')
        end if
        call check_status(vkf_switch_set(g%switch, merge(1_c_int, 0_c_int, g%drawn)), 'shadow')
    end subroutine write_region