realize Subroutine

private recursive subroutine realize(self, viewer)

Create the render nodes of this frame and its descendants (once; for viewer, a window's viewer handle, which some contents need while they are built (not kept); null: headless).

Type Bound

ReferenceFrame

Arguments

Type IntentOptional Attributes Name
class(ReferenceFrame), intent(inout) :: self
type(c_ptr), intent(in) :: viewer

a window's viewer handle (null: headless)


Calls

proc~~realize~~CallsGraph proc~realize ReferenceFrame%realize proc~realize->proc~realize interface~vkf_node_add_child vkf_node_add_child proc~realize->interface~vkf_node_add_child interface~vkf_switch_create vkf_switch_create proc~realize->interface~vkf_switch_create interface~vkf_switch_set vkf_switch_set proc~realize->interface~vkf_switch_set interface~vkf_transform_create vkf_transform_create proc~realize->interface~vkf_transform_create proc~build_contents ReferenceFrame%build_contents proc~realize->proc~build_contents proc~build_decorations build_decorations proc~realize->proc~build_decorations proc~build_light build_light proc~realize->proc~build_light proc~check_status check_status proc~realize->proc~check_status proc~sync ReferenceFrame%sync proc~realize->proc~sync proc~build_decorations->interface~vkf_node_add_child proc~build_decorations->interface~vkf_switch_create proc~build_decorations->proc~check_status proc~make_axis make_axis proc~build_decorations->proc~make_axis proc~make_name_label make_name_label proc~build_decorations->proc~make_name_label proc~reposition_axes ReferenceFrame%reposition_axes proc~build_decorations->proc~reposition_axes proc~update_switches update_switches proc~build_decorations->proc~update_switches proc~build_light->interface~vkf_node_add_child proc~build_light->interface~vkf_switch_create proc~build_light->proc~check_status interface~vkf_light_create vkf_light_create proc~build_light->interface~vkf_light_create proc~apply_light apply_light proc~build_light->proc~apply_light proc~sync->proc~check_status proc~sync->proc~sync interface~vkf_transform_set_matrix vkf_transform_set_matrix proc~sync->interface~vkf_transform_set_matrix proc~local_matrix ReferenceFrame%local_matrix proc~sync->proc~local_matrix proc~apply_light->proc~check_status interface~vkf_light_set vkf_light_set proc~apply_light->interface~vkf_light_set proc~frame_matrix frame_matrix proc~local_matrix->proc~frame_matrix proc~make_axis->proc~update_switches proc~arrow_create arrow_create proc~make_axis->proc~arrow_create proc~axis_label ReferenceFrame%axis_label proc~make_axis->proc~axis_label proc~label_create label_create proc~make_axis->proc~label_create proc~label_font ReferenceFrame%label_font proc~make_axis->proc~label_font proc~replace_child replace_child proc~make_axis->proc~replace_child proc~make_name_label->proc~check_status proc~make_name_label->proc~update_switches interface~vkf_label_set_on_top vkf_label_set_on_top proc~make_name_label->interface~vkf_label_set_on_top proc~make_name_label->proc~label_create proc~make_name_label->proc~label_font proc~name ReferenceFrame%name proc~make_name_label->proc~name proc~make_name_label->proc~replace_child proc~bound ReferenceFrame%bound proc~reposition_axes->proc~bound proc~update_switches->interface~vkf_switch_set proc~update_switches->proc~check_status interface~vkf_mesh_create vkf_mesh_create proc~arrow_create->interface~vkf_mesh_create proc~arrow arrow proc~arrow_create->proc~arrow proc~arrow_size arrow_size proc~arrow_create->proc~arrow_size proc~mesh_arrays mesh_arrays proc~arrow_create->proc~mesh_arrays proc~quat_to_matrix quat_to_matrix proc~frame_matrix->proc~quat_to_matrix interface~vkf_label_create vkf_label_create proc~label_create->interface~vkf_label_create proc~get_font get_font proc~label_create->proc~get_font proc~vsg_alignment vsg_alignment proc~label_create->proc~vsg_alignment proc~replace_child->interface~vkf_node_add_child proc~replace_child->proc~check_status interface~vkf_compile_node vkf_compile_node proc~replace_child->interface~vkf_compile_node interface~vkf_node_delete vkf_node_delete proc~replace_child->interface~vkf_node_delete interface~vkf_node_remove_child vkf_node_remove_child proc~replace_child->interface~vkf_node_remove_child proc~cross cross proc~arrow->proc~cross interface~vkf_font_read vkf_font_read proc~get_font->interface~vkf_font_read proc~find_font find_font proc~get_font->proc~find_font interface~vkf_mesh_array vkf_mesh_array proc~mesh_arrays->interface~vkf_mesh_array proc~find_in_dirs find_in_dirs proc~find_font->proc~find_in_dirs

Called by

proc~~realize~~CalledByGraph proc~realize ReferenceFrame%realize proc~realize->proc~realize proc~add_child ReferenceFrame%add_child proc~add_child->proc~realize proc~frame WindowProxy%frame proc~frame->proc~realize proc~resize WindowProxy%resize proc~resize->proc~frame proc~run WindowProxy%run proc~run->proc~frame

Source Code

    recursive subroutine realize(self, viewer)
        class(ReferenceFrame), intent(inout) :: self
        type(c_ptr), intent(in) :: viewer                   !! a window's viewer handle (null: headless)
        integer :: k
        if (self%realized) return
        self%realized = .true.
        self%shown_ = c_associated(viewer)
        self%node_ = vkf_transform_create()
        self%synced = .false.
        self%contents_node = vkf_switch_create()
        call check_status(vkf_node_add_child(self%node_, self%contents_node))
        call self%build_contents(viewer, self%contents_node)
        call build_decorations(self)
        if (self%light_source) call build_light(self)
        if (.not. self%contents) call check_status(vkf_switch_set(self%contents_node, 0_c_int))
        call self%sync()
        do k = 1, self%n_children
            call self%children(k)%p%realize(viewer)
            call check_status(vkf_node_add_child(self%node_, self%children(k)%p%node_))
        end do
    end subroutine realize